日期:2014-05-20  浏览次数:20721 次

关于java socket编程中的长连接问题!!!
我已经知道,要想使服务端能连接多个客户端可以使用如下代码:

while(true){
Socket socket = server.accept();
                newThreadForSocket(socket);//有连接就新开线程去处理
}


但是例如A客户端连上了服务端,只能给服务端发送一次消息,socket就关闭了,如何在run方法中使他能处理A客户端不定时发送来的消息?也是while(true)?但是总是提示socket已经close的异常。。
求各位高手能指点一下。。。不胜感激!!

------解决方案--------------------
Socket socket =null;//在循环内声明,每次都会在循环开始新建一个类对象
while(true){
 socket = server.accept();
newThreadForSocket(socket);//有连接就新开线程去处理
}
------解决方案--------------------
A客户端连上了服务端,只能给服务端发送一次消息,socket就关闭了
socket自己又不会关,关了肯定是你在发送完消息自己close掉客户端。
------解决方案--------------------
如楼上所说,楼主检查一下你的A客户端在发送了消息到服务器之后,是否存在一句socke.close();
根据楼主描述的问题,应该是这样。
还有一个,while(true)这里最后不要这样写,建议楼主在这里定义一个boolean类型变量代替,通过控制这里的变量来控制此线程,这样便于维护。
------解决方案--------------------
一次请求与一次响应,完成了全部工作.socket是要关闭的.
下一次请求的时候再创建,没有问题的.
就像大的网站,不可以一次请求与响应结束,socket还一直放在那不管,那资源很快就消耗完了.
------解决方案--------------------
引用:
一次请求与一次响应,完成了全部工作.socket是要关闭的.
下一次请求的时候再创建,没有问题的.
就像大的网站,不可以一次请求与响应结束,socket还一直放在那不管,那资源很快就消耗完了.

1、完成一次请求、响应就关闭socket,那是短连接
2、长连接现在使用非常普遍,链接不释放肯定是会消耗一些资源,但是节省了建立socket链接的时间,可以更快做出响应,提高性能,而且http 1.1 版本默认就是采用长连接