Java-ServerSocket 和socket之间通信如何实现一直在线模式

发布于 2017-06-01 00:39:55 字数 58 浏览 1211 评论 4

其实我的问题就是在客户端关闭的时候服务器端报IO的错误,不知道是要直接把那个错不输出还是有别的解决方式

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

晚风撩人 2017-10-18 07:23:30 4 楼

你说的是服务器端一直在线吗?

可以采用@aad_yang的思路,不过由于accept是阻塞等待的,建议采用线程池的方式进行处理

http://blog.csdn.net/licl19870605/article/details/8558000

这里有个介绍Socket的多线程处理的文章,可以参考一下

甜柠檬 2017-09-21 20:10:30 3 楼

对Socket了解不多,提供一个简单的思路,抛砖引玉:
服务端:
try{
ServerSocket ss....
while(true){
Socket s=ss.accept();
//通信
....
if(特定数据){
s.close();


}catch..
客户端:
发送心跳包维持连接

虐人心 2017-07-20 21:20:49 2 楼

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会被关闭.

浮生未歇 2017-06-16 14:06:36 1 楼

死循环嘛,然她一直处于监听状态

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击“接受”或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。