怪异之一:
connect(SocketAddress endpoint):这个方法,尝试连接server端,如果连接不上,就抛出IOException异常。如果连接成功了,就继续执行下一步的代码。
怪异之二:
boolean isConnected() :这个方法的结果仅仅代表这个socket曾经成功连接到了server,但并不表示现在这个时刻它和server仍保持连接状态。
有心的人会发现,即使你已经切断了server和socket之间的连接(比如server down掉了或网络中断了),但是这个函数执行的结果仍旧是true。所以,我认为这个方法并不像我们想象中的那么“管用”。
怪异之三:
考虑这样一种情况:
1.socket和server socket已经建立了连接
2.但是由于网络原因,这个时候连接中断了。大多数系统都会有一个断线重连的功能。
但是当你调试时,你可能会发现:网络恢复正常后,用这个socket重新连接serverSocket,却怎么也连不上。
在这里我的做法是:
socket=null;
//然后新建socket,而不是用原来的那个socket
socket = new Socket();
//接下来,用这个socket再去连接serverSocket,就可以成功连上了。
相关文章
- 基于Java socket和多线程的简易聊天小程序
- Java的多线程+Socket
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
- java 界面编程用socket实现服务端与客户端的循环通信。
- java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证
- java与Flash的Socket通讯
- JAVA套接字(Socket)101七天系列—第六天【一个带有连接池的示例】
- JAVA中Socket的用法模拟服务端和客户端
- 如何处理在socket java上发送的大对象?
- JAVA与网络开发(TCP:Socket、ServerSocket;UDP:DatagramSocket、DatagramPacket;多线程的C/S通讯、RMI开发概述)