Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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#_.net_Sockets - Fatal编程技术网

C# 插座不';线程完成时,请不要关闭

C# 插座不';线程完成时,请不要关闭,c#,.net,sockets,C#,.net,Sockets,我的插座有问题。这: 当客户端线程结束时,服务器将尝试读取,并且由于套接字未关闭而冻结。当它结束时,不要合上它。它的问题是存在的,如果我使用线程,但如果我使用两个独立的项目,我没有问题(异常抛出,我可以捕获它)。 我不能使用超时,我必须纠正,当客户端不关闭套接字时,继续服务器工作。 对不起,我的英文不好。当您希望关闭连接时关闭客户端(在客户端的末尾) 更好的方法是,对所有可使用的资源(如客户端和侦听器)使用using。Closeclient当您希望关闭连接时(在client末尾) 更好的方法是

我的插座有问题。这:

当客户端线程结束时,服务器将尝试读取,并且由于套接字未关闭而冻结。当它结束时,不要合上它。它的问题是存在的,如果我使用线程,但如果我使用两个独立的项目,我没有问题(异常抛出,我可以捕获它)。 我不能使用超时,我必须纠正,当客户端不关闭套接字时,继续服务器工作。
对不起,我的英文不好。

当您希望关闭连接时关闭
客户端
(在
客户端
的末尾)


更好的方法是,对所有可使用的资源(如客户端和侦听器)使用
using

Close
client
当您希望关闭连接时(在
client
末尾)


更好的方法是,对所有可使用的资源(如客户端和侦听器)使用
using

据我所知,TCP服务器(侦听器)无法确定来自客户端的数据是否因为已死亡/退出或只是处于非活动状态而未到来。这不是.NET的缺陷,而是TCP的工作原理。我的处理方式是: 1.在我的客户机中创建一个计时器,定期向服务器发送信号“我还活着”。例如,我只发送一个不寻常的ASCII字符'∩' (代码239)。 2.在TCP侦听器中:使用允许指定超时的
NetworkStream.Read(…)
方法。如果超时过期,服务器将处理旧的NetworkStream实例,并在同一TCP端口上创建新实例。如果服务器从客户端接收到“我还活着”信号,它将继续侦听


顺便说一句,属性
TcpClient.Connected
对于在服务器端检测客户端是否仍然使用套接字是无用的。如果上次读取操作返回内容,则该方法仅返回
true
。因此,如果客户机处于活动状态且只是静默状态,则
TcpClient.Connected
将变为false。

据我所知,TCP服务器(侦听器)无法确定来自客户机的数据是否因为已死亡/退出或只是处于非活动状态而没有到来。这不是.NET的缺陷,而是TCP的工作原理。我的处理方式是: 1.在我的客户机中创建一个计时器,定期向服务器发送信号“我还活着”。例如,我只发送一个不寻常的ASCII字符'∩' (代码239)。 2.在TCP侦听器中:使用允许指定超时的
NetworkStream.Read(…)
方法。如果超时过期,服务器将处理旧的NetworkStream实例,并在同一TCP端口上创建新实例。如果服务器从客户端接收到“我还活着”信号,它将继续侦听


顺便说一句,属性
TcpClient.Connected
对于在服务器端检测客户端是否仍然使用套接字是无用的。如果上次读取操作返回内容,则该方法仅返回
true
。因此,如果客户机处于活动状态,只是处于静默状态,
TcpClient.Connected
将变为false。

.NET不是魔术。除非你叫它关上,否则插座是关不上的网络不是魔法。除非你让它关闭,否则插座不会关闭。这是个问题——我需要为我的服务器投保。任何客户端都不能关闭服务器。这是一个问题——我需要确保我的服务器。任何客户端都不能关闭服务器。