Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 谁关闭了套接字连接_C#_Sockets_Tcp - Fatal编程技术网

C# 谁关闭了套接字连接

C# 谁关闭了套接字连接,c#,sockets,tcp,C#,Sockets,Tcp,我有一个服务器/客户机套接字应用程序,从上面的示例来看,服务器和客户机在接收数据后都会关闭并关闭连接。对吗? 我一直在使用disconnect,但无法重新打开连接,但使用了shutdown/close: if (_sender.Connected) { _sender.Shutdown(SocketShutdown.Both); _sender.Close();

我有一个服务器/客户机套接字应用程序,从上面的示例来看,服务器和客户机在接收数据后都会关闭并关闭连接。对吗? 我一直在使用disconnect,但无法重新打开连接,但使用了shutdown/close:

            if (_sender.Connected)
            {
                _sender.Shutdown(SocketShutdown.Both);
                _sender.Close();
            }
看起来很好用。但这是否应该在客户端(启动器)和服务器(收件人)套接字上都调用?
谢谢

您需要在客户端和服务器上执行此操作,因为它们都有独立的资源在使用。套接字在关闭时可能会变得混乱(大量异常),因此您需要确保同时在客户端和服务器上处理异常。

您需要同时在客户端和服务器上执行此操作,因为它们都使用独立的资源。套接字在关闭时可能会变得混乱(许多异常),因此您需要确保您也在处理客户端和服务器上的异常。

由哪一方发起关闭并不重要。如果完全关闭,则另一端的下一个读取操作将读取0字节。如果关闭没有完全完成,则另一端的下一次读取操作将引发异常

通常,期望任何套接字方法出现异常总是一个好主意(除了
Close
,它不会引发异常,除了)。每当看到异常时,只需调用
Close


注意,
已连接
是无用的,
关闭
在这种情况下不会给您带来任何好处。只需调用
Close

无论哪一方发起关闭操作。如果完全关闭,则另一端的下一个读取操作将读取0字节。如果关闭没有完全完成,则另一端的下一次读取操作将引发异常

通常,期望任何套接字方法出现异常总是一个好主意(除了
Close
,它不会引发异常,除了)。每当看到异常时,只需调用
Close


注意,
已连接
是无用的,
关闭
在这种情况下不会给您带来任何好处。只需拨打
Close

谢谢。我将删除已连接检查。根据MSDN文档“当使用面向连接的套接字时,请在关闭套接字之前始终调用Shutdown方法。这将确保在关闭已连接的套接字之前在其上发送和接收所有数据。”connected方法不会告诉您它当前已连接,但它也不是完全无用的。它确实会告诉您是否在最近的操作中连接了套接字,但在大多数情况下,这不会有帮助。(关于
关机
):MSDN文档涵盖了(极为罕见的)另一方仍在发送数据,而接收方希望关闭套接字,但确保先读取所有剩余数据的情况。要以这种方式使用
Shutdown
,您必须只关闭发送流,然后继续读取。在这种情况下,由于op在
Shutdown
之后立即调用
Close
,因此对
Shutdown
的调用完全没有必要。有关更多信息,请参阅。(re.
已连接
):多年来我一直在思考这个问题。我想不出哪种情况下
Connected
的返回值有用。人们几乎总是试图在“当前是否连接了套接字”逻辑中使用它,这是错误的。请看,特别是Joel Mueller的评论。谢谢。我将删除已连接检查。根据MSDN文档“当使用面向连接的套接字时,请在关闭套接字之前始终调用Shutdown方法。这将确保在关闭已连接的套接字之前在其上发送和接收所有数据。”connected方法不会告诉您它当前已连接,但它也不是完全无用的。它确实会告诉您是否在最近的操作中连接了套接字,但在大多数情况下,这不会有帮助。(关于
关机
):MSDN文档涵盖了(极为罕见的)另一方仍在发送数据,而接收方希望关闭套接字,但确保先读取所有剩余数据的情况。要以这种方式使用
Shutdown
,您必须只关闭发送流,然后继续读取。在这种情况下,由于op在
Shutdown
之后立即调用
Close
,因此对
Shutdown
的调用完全没有必要。有关更多信息,请参阅。(re.
已连接
):多年来我一直在思考这个问题。我想不出哪种情况下
Connected
的返回值有用。人们几乎总是试图在“当前是否连接了套接字”逻辑中使用它,这是错误的。看,特别是乔尔·穆勒的评论。这样做似乎是多余的,现在我确定我会把电话都留在这两个地方。谢天谢地这样做似乎是多余的,现在我确定我会把电话都留在这两个地方。谢谢