socket 连接超时处理 java

之前很少做这种纯的socket编程,最近公司有项目需要跟pc端通信,自己定协议发报文,就写了一个简单的基于java socket的client。

功能差不多了以后,发现一个问题,向pc端发报文时,pc端ip port 不通的情况下,会一直死等,等到天荒地老。这种情况我刚开始以为是代码出现了问题。

之前的代码:

                 Socket socket = null;
                try {
                    socket =new Socket(host,port);//问题出在这里
                     socket.setSoTimeout(timeout);
                 我以为我设置了超时:  socket.setSoTimeout(timeout);,其实这个是响应阻塞超时,是client和服务端建立连接后,等待接收数据的超时时间,真正的连接超时我没有处理。


解决:
                 Socket socket = null;
                try {
                    socket = new Socket();
                    SocketAddress socketAddress = new InetSocketAddress(host, port);
                    socket.connect(socketAddress, 100);//连不上的0.1毫秒断掉连接
                     socket.setSoTimeout(timeout);//响应阻塞超时
  这样就好了   ip连不上的0.1秒就断开,connectTimeout 异常

参考的这位老哥的 http://blog.csdn.net/tterminator/article/details/52494141  感谢!!!

你可能感兴趣的:(socket 连接超时处理 java)