java 如何让socket的两端一直保持着开放,随时接受和发送数据?

halfsuccess 2013-03-20 09:53:38
java 如何让socket的两端一直保持着开放,随时接受和发送数据?
...全文
7411 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-03-22
  • 打赏
  • 举报
回复
引用 8 楼 jike316 的回复:
引用 6 楼 hifinan 的回复:引用 5 楼 preferme 的回复:通信双方,在链路空闲的时候,定时发送一些垃圾数据(或者特定的数据),维持连接即可。 这样的话,这个连接就可以持久的存在,即,长连接。 不发送数据,也不调用close(),这个连接也会断掉么? 只要没有关闭不会的,除非双方主动关闭了连接。客户端关闭连接后一般是可以重连的,服务器发心跳消息是检……
所谓的连接对象照这么看只是单方面维持的了,心跳检测完对方不存在然后关闭连接
halfsuccess 2013-03-22
  • 打赏
  • 举报
回复 1
嗯,preferme说的有道理。TCP双方在发送数据后,如果长时间(其实,这个时间也不是很长,秒 级别)没有数据交流,socket会自动断开连接,断开后系统也不会自动重连。还有一种情况,任意 一方close()掉,随机而来的是整个socket都会断开连接。
冰思雨 2013-03-22
  • 打赏
  • 举报
回复
Java中的Socket类,连接操作是“用户”手动调用的(这里的用户是程序的开发者,API的调用者)。 Socket类,没有提供重连方法,操作系统也不会自动重连, 所以,Socket对象,在连接后,如果close掉连接,或者连接断开了,就没办法再使用了, 这时要重新再创建一个Socket对象,重新对本地套接字进行绑定,重新连接服务端。 要想实现断线重连的功能,需要“用户”自己编写代码,完成Socket对象的创建、绑定和连接操作。 这个不是楼主提出的问题。 楼主只想知道,怎样才能弄一个持久可用的连接来收发数据,那么,首选长连接形式。 断线自动重连这种功能,要看程序是否有这样的需求了,一般程序都没I有这样的需求, 如果发送断线,会有提示,用户(软件的使用者)会根据提示再次连接服务端。
Johnson518 2013-03-21
  • 打赏
  • 举报
回复
引用 10 楼 preferme 的回复:
引用 6 楼 hifinan 的回复: 不发送数据,也不调用close(),这个连接也会断掉么? 采用TCP协议的通讯中,如果长时间不发送数据,连接会有被断开的可能。 即使通信双方,都把超时时间设置得无限大,整个TCP连接,也会被中间节点(比如路由器,三层交换机等数据转发设备,它们也有维护连接的超时设置)强行端开,并且这种断开方式,是不会向通信双方发送任何数据的,因此,这种情况下通信双方无法……
明白你的说明, 我在想,Socket和ServerSocket类会不会是在后台处理的TCP通信,即TCP连接超时,已经断掉,但在Socket发送数据时,Socket和ServerSocket类会自动重新建立TCP连接,然后再将数据发送出去。 我得测试下这个猜想,看看Socket和ServerSocket是不是这么处理的。
冰思雨 2013-03-21
  • 打赏
  • 举报
回复
引用 6 楼 hifinan 的回复:
不发送数据,也不调用close(),这个连接也会断掉么?
采用TCP协议的通讯中,如果长时间不发送数据,连接会有被断开的可能。 即使通信双方,都把超时时间设置得无限大,整个TCP连接,也会被中间节点(比如路由器,三层交换机等数据转发设备,它们也有维护连接的超时设置)强行端开,并且这种断开方式,是不会向通信双方发送任何数据的,因此,这种情况下通信双方无法感应到连接已经被cut掉了。希望你能明白。
Johnson518 2013-03-21
  • 打赏
  • 举报
回复
引用 8 楼 jike316 的回复:
引用 6 楼 hifinan 的回复: 引用 5 楼 preferme 的回复:通信双方,在链路空闲的时候,定时发送一些垃圾数据(或者特定的数据),维持连接即可。 这样的话,这个连接就可以持久的存在,即,长连接。 不发送数据,也不调用close(),这个连接也会断掉么? 只要没有关闭不会的,除非双方主动关闭了连接。客户端关闭连接后一般是可以重连的,服务器发心跳消息是检测对方是否存在,不存在……
了解了,谢谢
2399 2013-03-21
  • 打赏
  • 举报
回复
引用 6 楼 hifinan 的回复:
引用 5 楼 preferme 的回复:通信双方,在链路空闲的时候,定时发送一些垃圾数据(或者特定的数据),维持连接即可。 这样的话,这个连接就可以持久的存在,即,长连接。 不发送数据,也不调用close(),这个连接也会断掉么?
只要没有关闭不会的,除非双方主动关闭了连接。客户端关闭连接后一般是可以重连的,服务器发心跳消息是检测对方是否存在,不存在就关闭连接,不消耗资源而已
yls_2523168510 2013-03-21
  • 打赏
  • 举报
回复
两端启用while(true){}循环就搞定了
Johnson518 2013-03-21
  • 打赏
  • 举报
回复
引用 5 楼 preferme 的回复:
通信双方,在链路空闲的时候,定时发送一些垃圾数据(或者特定的数据),维持连接即可。 这样的话,这个连接就可以持久的存在,即,长连接。
不发送数据,也不调用close(),这个连接也会断掉么?
冰思雨 2013-03-21
  • 打赏
  • 举报
回复
通信双方,在链路空闲的时候,定时发送一些垃圾数据(或者特定的数据),维持连接即可。 这样的话,这个连接就可以持久的存在,即,长连接。
Terry_dong 2013-03-21
  • 打赏
  • 举报
回复
可以用一个while()循环啊!!
dracularking 2013-03-20
  • 打赏
  • 举报
回复
就相当于ServerSocket连接一个客户端就再建一个,随时准备接受新的连接
诗错亦染瑾 2013-03-20
  • 打赏
  • 举报
回复
引用 楼主 halfsuccess 的回复:
java 如何让socket的两端一直保持着开放,随时接受和发送数据?
用while()循环不断接受和发送,要用线程啊记得。。。然后添加事件响应 关闭程序就调用socket.close();
Inhibitory 2013-03-20
  • 打赏
  • 举报
回复
去看看MIMA,异步IO实现的,能满足你的需求

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧