socket 线程 请教各位大虾一个问题,假如我用一个线程建立SOCKET连接,当我突然把这个线程结束掉的时候,那么这个线程所创建的这个SOCKET是否也跟着一起结束,其所占用的资源是否完全释放?因为最近经常遇到SOCKET突然出现异常的情况,打算当出现异常的时候重新初始化一个SOCKET来建立连接,所以用这种方法来实现,不知道可不可行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程一般是主动结束,应该有时间close socket。 socket出异常的话,楼主可以catch异常并主动close socket,就不会有socket还在不在这样的疑问了。 个人感觉不会 ,如果你开辟某个线程去连接Socket 当你的Socket 连接成功了以后,那么你这个线程的任务就结束了啊。 我感觉可以这样做,发生异常的时候直接处理并发出连接关闭,然后再通过该线程重新建立套接字。 线程如果被强行终止,并且在终止之前,线程没有调用Socket的close方法,那么,线程终止后,Socket是不会被关闭的,socket的相关资源,暂由操作系统来维护。当然,操作系统针对这种情况,操作系统也有相关的策略来回收Socket资源 ,比如超时未发送、接收,自动断开Socket并回收相应资源。以上都为个人理解。如有不对,请指正。 我有试过当出现异常的时候sct.close();sct=null;sct=new Socket();//重新连接不过还是不行,我有上BAIDU查,有一个说法是说当调用sct.close()的时候,底沉的连接并未断开。这问题困扰很久了,纠结啊。 BAIDU说的也不一定准Socket连接不是应该要把IP地址和端口号写上才能连吗,那么就算底层的连接并未断开也不要紧,反正服务端的ServerSocket必须accept之后才能保证新的Socket起作用,所以只要服务端的Socket能够正常关闭,客户端原先的Socket自然而然会关闭,感觉应该是这样吧 我今天自己测试了下,在连接断开的时候,客户端重新连接,如果用以下方法会提示java.net.SocketException: Socket closed1 try{2 if(clientSocket!=null)3 clientSocket.close();4 clientSocket=new Socket("122.118.11.102",8080);5 }catch(Exception e2)6 {}但如果把2 3 两行注释掉,这没有问题,不知道是什么原因,清楚的说下。 光close/new socket不行的,上面的input/outputStream都要close/get才行。 java给结构赋值 一个奇怪的问题,…… 求一个简单的小程序,题目如下 关于框架的学习? 初学JAVA,请问如何才能看到JAVA类库的源代码? 已排序数组,用二分法查找,谁给个例子? 急寻程序,帮帮忙 特急!url中传的参数中有特殊字符如&key=aa&aa&key2=value,我要怎样才能正确解析? java基本语法、API问题。 InputStream 抽象类的问题? java 怎么匹配结果集的问题? 为什么JToolBar上按钮的文字不能显示?
那么,线程终止后,Socket是不会被关闭的,socket的相关资源,暂由操作系统来维护。当然,操作系统针对这种情况,操作系统也有相关的策略来回收Socket资源 ,
比如超时未发送、接收,自动断开Socket并回收相应资源。以上都为个人理解。如有不对,请指正。
sct.close();
sct=null;
sct=new Socket();//重新连接
不过还是不行,我有上BAIDU查,有一个说法是说当调用sct.close()的时候,底沉的连接并未断开。这问题困扰很久了,纠结啊。
BAIDU说的也不一定准Socket连接不是应该要把IP地址和端口号写上才能连吗,那么就算底层的连接并未断开也不要紧,反正服务端的ServerSocket必须accept之后才能保证新的Socket起作用,所以只要服务端的Socket能够正常关闭,客户端原先的Socket自然而然会关闭,感觉应该是这样吧
我今天自己测试了下,在连接断开的时候,客户端重新连接,如果用以下方法会提示
java.net.SocketException: Socket closed
1 try{
2 if(clientSocket!=null)
3 clientSocket.close();
4 clientSocket=new Socket("122.118.11.102",8080);
5 }catch(Exception e2)
6 {}
但如果把2 3 两行注释掉,这没有问题,不知道是什么原因,清楚的说下。