c#做socket通讯
服务器和客户端用tcp长连接,服务器如何能及时的检测到客户端掉线,我用了心跳机制,是隔1分钟发一次心跳,但是这样也需要一分钟才知道客户端掉线,有没有更好的办法,客户端一掉线就通知服务器。 --------------------编程问答-------------------- 一分钟太长了,需要缩短,做不到实时,只能尽快 --------------------编程问答-------------------- 如果缩短时间,结果可能会导致客户端经常断线重连,因为客户端的socket还要回复其他的信息,客户端socket处理不过来 --------------------编程问答-------------------- --------------------编程问答-------------------- tcp/ip 线程机制每个连接进来的 的socketclient 都启个线程 执行
try
{
堵塞式
}
catch
{
break;//你懂的
} --------------------编程问答-------------------- 服务器端我用了线程池,每个连接一个线程,这个都没问题,主要是我想及时的知道客户端的连接断开,这样我和客户端的通讯就不会丢信息。 --------------------编程问答-------------------- 搞一个事件侦听!当客户端主程序关闭事就触发此事件,这样就OK了 --------------------编程问答--------------------
... ...
求详细解决方案,客户端程序如何触发此事件... ..特别是client为浏览器的情况下. --------------------编程问答-------------------- 貌似QQ也就是那样吧,断网了要等大概一分钟才知道掉线了。。。 --------------------编程问答-------------------- 1.心跳间隔时间需要与超时时间进行配合,单纯减少心跳时间可能会有问题。
2.try 起来必不可少,注意的是检测的socketException错误代码为10004
3.服务器accept产生的client的socket接收数据长度为0也代表出问题了
推荐读一下supersocket的开源源代码
补充:.NET技术 , C#