有没有办法检查C#中服务器套接字的状态?

时间:2017-05-11 05:20:32

标签: c# sockets

我是Socket编程的初学C#开发人员。

我想要的是我想检查服务器套接字的状态。

有时,我的服务器套接字是由此选项创建的

new Socket(AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);

刚刚因某些原因关闭(我不知道为什么...... T_T)

所以,如果我的服务器套接字关闭,我想重新打开,以便我的客户端可以连接。

有没有办法重新开放?

1 个答案:

答案 0 :(得分:0)

您应该将事件处理程序附加到套接字关闭时触发的事件,而不是定期查看您的套接字是否仍处于打开状态,并使用该时刻对套接字执行某些操作(例如重新打开它)。关于它为什么会关闭(因为它们不应该),请确保您的连接处理逻辑经过深思熟虑并且正确地进行了多线程(或使用异步方法,这将为您建立线程工作者)。您可能遇到套接字正在“关闭”的情况,因为您没有及时正确地返回到准备好进行下一次连接的侦听状态。

一般模式应该是接受连接并尽快返回监听,将连接处理交给另一个线程或工作人员。如果你不这样做,而是尝试完全在接受连接的相同线程上下文中处理客户端,如果客户端停止说话或意外离开,它会杀死你的套接字

我们确实需要了解更多的连接处理逻辑,以了解这方面的情况是否良好;发布一个如何创建套接字的片段是不够的