C# Socket通信问题,请高手指教。

hbbliyong 2010-02-21 11:58:34
现在做一个连续通信程序,我为服务器,别人向我发送一个请求链接,也就是为我建立一个通信链路,我通过这个链路连续不断的向其发送数据,现在发送间隔为一分钟。现在问题是断线的次数太多。只要链路不通。客户端就主动向服务器发送请求建立链路。想请教高手,怎样才能在这个链路上持续不断的发送数据?还有出现这种断线的原因可能是那些或者给提供一些思路,不胜感激!!!
...全文
600 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ts_Coo 2012-08-11
  • 打赏
  • 举报
回复
xiexie
hbbliyong 2010-05-25
  • 打赏
  • 举报
回复
在顶一下啊…………
cqsfd 2010-05-25
  • 打赏
  • 举报
回复
我倒 楼主说的是这个问题啊 我在你空间留言你没看到?
你们的服务器也是一两台,但客户端可能分部在全国各地?
一般来说这样是没有完美的解决方案的
我的项目,开始遇到和你一样的问题
开始用KEEPALIVE做,测试1个月后,发现效果不理想
后来自己做心跳包
把整个通信架构都改过来了 用的是非阻塞模式
心跳包发送的时间动态变化,网络越不稳定,时间越短
3个月运行下来,基本可行
csdnfan 2010-02-23
  • 打赏
  • 举报
回复
试一下设置socket的keepalive为true 。。。
hbbliyong 2010-02-23
  • 打赏
  • 举报
回复
期待好的建议出现…………
hbbliyong 2010-02-23
  • 打赏
  • 举报
回复
自己顶起……………………
hbbliyong 2010-02-23
  • 打赏
  • 举报
回复
引用 33 楼 xinsiyu2008 的回复:
试一下设置socket的keepalive为true 。。。
恩,设置过了
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
引用 23 楼 walkghost 的回复:
断线的原因是什么?是不是代码中循环的问题?
用长连接。

何为长连接?
walkghost 2010-02-22
  • 打赏
  • 举报
回复
断线的原因是什么?是不是代码中循环的问题?
用长连接。
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
测试中,期待其他方法
sgchen 2010-02-22
  • 打赏
  • 举报
回复
引用 16 楼 hbbliyong 的回复:
引用 14 楼 sgchen2000 的回复:TCP连接一般不会无缘无故断开的,应该从客户端上查找原因,因为是它认为断开了。
客户端应该没问题,因为好多服务器都向他发数据,其他的程序都很少断掉……我的断掉的多……


不表示它一定有问题,要看它怎样判断Socket断开,再跟你服务器端比较。比如我用c#写的都是判断接收到空信息就表示连接断开(目前为止我知道的最有效的方法),因此如果用空信息作为握手包就适得其反了。
原则上,首先你要知道是你的服务器主动断开,还是客户端主动断开,再查找断开的原因。

握手包只是用来处理网络异常断开的情况,Socket主动断开是可以检测出来的。
Jave.Lin 2010-02-22
  • 打赏
  • 举报
回复
学习~~~~~~~~~~~~~~~~~~~~~~~~~`
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
引用 14 楼 sgchen2000 的回复:
TCP连接一般不会无缘无故断开的,应该从客户端上查找原因,因为是它认为断开了。

别的程序连接都正常,所以客户端是没有问题的
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
引用 27 楼 kenshinggg 的回复:
利用 心跳机制 也就跟上面有人说的差不多。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。

应该是心跳起作用了,现在还没断开!
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
引用 29 楼 wuzhicheng5 的回复:
服务器端每收到一次数据,回发确认。

呵呵,我们只负责服务端的开发,客户端改不了,也不能改!所以没有确认!不知道是什么原因断开,测不了,客户端收不到数据或者检测连接已经中断就重新建立连接,我是服务端,只能按照客户端的方式走!
快两天了,目前一次断开还没有……
wuzhicheng5 2010-02-22
  • 打赏
  • 举报
回复
服务器端每收到一次数据,回发确认。
wuzhicheng5 2010-02-22
  • 打赏
  • 举报
回复
如果可以,你还是把代码监听代码发上来看看,
10楼的看法是正确的,主要看你的客户端个数是否很多?发送包的频率有多高?

请问,你的连接断开原因有找到吗?

正常断开,程序控制的断开?
网络中断?
异常断开?

建议你还是使用长连接吧,用多线程实现,即客户端一旦与服务器建立连接,可以连续的不间断的发送数据包,
同时建议你建立一个客户端与服务器端数据包的确认回发机制,即服务器端没收到一次数据,回发确认。
panrongzeng 2010-02-22
  • 打赏
  • 举报
回复
利用 心跳机制 也就跟上面有人说的差不多。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
hbbliyong 2010-02-22
  • 打赏
  • 举报
回复
测试中,已经一天了还没有断掉,采用楼上几位的方法……,期待其他方法………………
zhxingway 2010-02-22
  • 打赏
  • 举报
回复
厉害啊,学习了.
加载更多回复(17)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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