Java-ServerSocket 和socket之间通信如何实现一直在线模式
其实我的问题就是在客户端关闭的时候服务器端报IO的错误,不知道是要直接把那个错不输出还是有别的解决方式
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(4)
1). 因为是长连接, 线程池在这里是用不上的. 应该是每一个socket单独一个线程, 例子见:
http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
-> Supporting Multiple Clients
这里, 针对楼主的需求来说, 服务器不可能支持很多长连接, 所以不会有太多的线程.
2). 关于心跳包, 可以自己定义. 不过java也提供支持:
http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getKeepAlive%28%29
--> Socket.get/setKeepAlive()
http://download.java.net/jdk7/archive/b123/docs/api/java/net/SocketOptions.html#SO_KEEPALIVE
注意这里1). 两个小时socket没有通信来回, 才会发送心跳包; 2). 如果拿到RST返回或是没有返回, 则socket会被关闭.
~没有更多了~
你说的是服务器端一直在线吗?
可以采用@aad_yang的思路,不过由于accept是阻塞等待的,建议采用线程池的方式进行处理
http://blog.csdn.net/licl19870605/article/details/8558000
这里有个介绍Socket的多线程处理的文章,可以参考一下