我已经知道,要想使服务端能连接多个客户端可以使用如下代码: while(true){
Socket socket = server.accept();
                newThreadForSocket(socket);//有连接就新开线程去处理
}
但是例如A客户端连上了服务端,只能给服务端发送一次消息,socket就关闭了,如何在run方法中使他能处理A客户端不定时发送来的消息?也是while(true)?但是总是提示socket已经close的异常。。
求各位高手能指点一下不胜感激!!

解决方案 »

  1.   

    Socket socket =null;//在循环内声明,每次都会在循环开始新建一个类对象
    while(true){
     socket = server.accept();
    newThreadForSocket(socket);//有连接就新开线程去处理
    }
      

  2.   

    A客户端连上了服务端,只能给服务端发送一次消息,socket就关闭了
    socket自己又不会关,关了肯定是你在发送完消息自己close掉客户端。
      

  3.   

    如楼上所说,楼主检查一下你的A客户端在发送了消息到服务器之后,是否存在一句socke.close();
    根据楼主描述的问题,应该是这样。
    还有一个,while(true)这里最后不要这样写,建议楼主在这里定义一个boolean类型变量代替,通过控制这里的变量来控制此线程,这样便于维护。
      

  4.   

    对的,好像包装流关闭了,socket就关闭了,我在网上找了一下,他们都是自己定义了一种数据协议,比如接受到的数据中只有bye就退出循环,再关闭socket。
      

  5.   

    一次请求与一次响应,完成了全部工作.socket是要关闭的.
    下一次请求的时候再创建,没有问题的.
    就像大的网站,不可以一次请求与响应结束,socket还一直放在那不管,那资源很快就消耗完了.
      

  6.   

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