3分 |
所谓”实时”,没有绝对意义上的实时,只是相对的
难道数据通信不需要时间? 而且时间精确到毫秒也根本没有任何意义 |
3分 |
对于非外在因素的断开,是可以实时知道的,那就是在连接上保持一个接收操作,当接收到0字节时即为断开连接.
如果是因物理线路原因断开是无效的,这个需要发送心跳包看有无回复,无回复则为断开. |
3分 |
有个IsConnected属性是上一次发送或接收时的状态
MSDN说了是尝试发送零字节的数据,成功了就是还连着 try { socekt.Send(new byte[0]); return true; } catch( SocketError exp){ { return false; } 另外,Select方法可以判断多种状态, http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.select.aspx |
这是是我说的有问题,我就是想当一段断开后,另一端能知道已经断开了。。。
|
|
3分 |
public void receivemessage() { while (true) { string receiveStr = null; try { receiveStr = br.ReadString();//会卡在这,只有接受到东西才会执行下一次循环 } catch{} if (receiveStr == null) { richTextBox1.Text += "与客户端断开连接....\n"; break; } } } /pre> |
2分 |
可以使用心跳包检测,.Net中的Socket提供了这样的功能
|
1分 |
catch{}
if (receiveStr == null) { richTextBox1.Text += “与客户端断开连接….\n”; break; } 你都不判别异常类型就知道?你怎么知道不是ReceiveTimeout时间到了,而此时发送方并未断开连接 |
2分 |
做一个心跳包线程,如果服务器端不能返回数据,或者异常 说明断了
所谓心跳包 就是发送数据 (只不过这个数据很小 自定义) |
1分 |
无所谓了,我是随便找来的一段代码,看懂了必然会考虑异常 |
2分 |
这个问题基本是使用心跳包解决,但没有绝对的实时。
|