socket连接超时原因

dannielhome 2011-01-13 04:20:48
我在远程几台服务器(win2003,linux)上部署了socket服务端,本地客户端连接上去后,客户端5分钟内没有发送消息准时自动断开,需要重连,但是其中有一台服务器不会出现这个请况。
然后如果在局域网内部署socket服务端,客户端连接却不会有超时自动断开的问题,这是什么原因?
有人说是服务器上系统环境TCP参数配置问题,但是具体是什么参数呢?
我现在想不管什么环境,socket客户端连接后就不会断开,我现在想知道系统环境这边对socket程序的影响,麻烦大家帮我找找原因,谢谢啦。。。
...全文
1108 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxcyly1985 2012-05-23
  • 打赏
  • 举报
回复
服务器长时间没接收到数据 断开很正常
axman 2011-01-16
  • 打赏
  • 举报
回复
不想多说了。
dannielhome 2011-01-15
  • 打赏
  • 举报
回复
如果是您这个办法可以用我早就解决了,客户端不是我们能控制的,我们只负责服务端和指令协议。
[Quote=引用 7 楼 preferme 的回复:]

想TCP连接一直都不断开,那就采用TCP长连接的方式进行通信。
楼主,每3秒发送一个废物信息给服务端,用来保持连接,即可。
[/Quote]
dannielhome 2011-01-15
  • 打赏
  • 举报
回复
那个异常也是我们用来判断客户端主动断开的一个标识,而且这里的断开都不是服务程序发起的,其他客户他们用的长连接定时发送检测连接的指令就完全没问题;如果我在程序里做超时设置,把超时的时间定长一些超过5分钟也是没用,5分钟后客户端没有发送指令过来也会断开,如果小于5分钟服务端就主动去断开客户端,还是觉得这是客户端和系统网络环境的问题!!
[Quote=引用 8 楼 py330316117 的回复:]

没有代码真的不好说啊。一个异常可能有很多种状况啊。不一定别的连你没异常就说明服务器没有问题啊,也可能是你的代码不兼容c#的客户端那。也可能是客户端的某些设置不被服务器接收那?

听你的意思这是个已经完成的项目,那么应该是不能贴代码了?如果可以贴的话还可以帮你看看。

java.net.SocketException: Connection reset这个异常就是socket连接重置,至于……
[/Quote]
py330316117 2011-01-14
  • 打赏
  • 举报
回复
没有代码真的不好说啊。一个异常可能有很多种状况啊。不一定别的连你没异常就说明服务器没有问题啊,也可能是你的代码不兼容c#的客户端那。也可能是客户端的某些设置不被服务器接收那?

听你的意思这是个已经完成的项目,那么应该是不能贴代码了?如果可以贴的话还可以帮你看看。

java.net.SocketException: Connection reset这个异常就是socket连接重置,至于为什么重置原因很多。端口、协议的异常都可能产生啊。
冰思雨 2011-01-14
  • 打赏
  • 举报
回复
想TCP连接一直都不断开,那就采用TCP长连接的方式进行通信。
楼主,每3秒发送一个废物信息给服务端,用来保持连接,即可。
dannielhome 2011-01-14
  • 打赏
  • 举报
回复
(py330316117)不是聊天系统,服务端线程那些都没问题的,多个客户端连接上来都没问题,如果客户端有定时发送命令保持连接或它有自动重连功能,两端运行多久都不会有问题,现在是有个客户端他不肯做自动重连和心跳,要我们这边找出解决问题,所以才很头痛。把程序挂外网,网络环境加上系统环境,这问题真的很难找。。。
py330316117 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dannielhome 的回复:]

客户端断开并没有影响到服务端,只是服务端都会提示一个java.net.SocketException: Connection reset。有个客户他的客户端是c#写的,他客户端断开再次发送请求的时候会有“远程主机强迫断开一个现有连接”的提示出来,需要重新连接。
[/Quote]

提示java.net.SocketException: Connection reset说明是服务器端没有处理好读取的socket,建议用线程处理这类问题,可以让断开的客户端线程先等待然后等所有客户端都断开再断开服务器。

“远程主机强迫断开一个现有连接”的提示出来。说明是客户端的问题了,因为不太懂c#的socket编程所以我不好说。

另外问一句,你这是聊天系统?如果是我可以给你个简单的chart代码,你可以参考下。
dannielhome 2011-01-13
  • 打赏
  • 举报
回复
客户端断开并没有影响到服务端,只是服务端都会提示一个java.net.SocketException: Connection reset。有个客户他的客户端是c#写的,他客户端断开再次发送请求的时候会有“远程主机强迫断开一个现有连接”的提示出来,需要重新连接。
疯癫行者 2011-01-13
  • 打赏
  • 举报
回复
可能与网络环境或者服务器有关,有的交换机或者服务器对长链接有限制,加入你用的是同一个程序,但不同服务器/网络环境得出的结果不同,那么就要找找这方面原因了。
dracularking 2011-01-13
  • 打赏
  • 举报
回复
断开有提示是什么原因吗 确定服务端程序部分几个都一样吗,也就是说区别只是换了个系统环境
axman 2011-01-13
  • 打赏
  • 举报
回复
有走F5吗?

62,634

社区成员

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

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