Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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#_.net_Sockets_Asynchronous_Client Server - Fatal编程技术网

C# 我应该为每个事务打开和关闭套接字吗?

C# 我应该为每个事务打开和关闭套接字吗?,c#,.net,sockets,asynchronous,client-server,C#,.net,Sockets,Asynchronous,Client Server,我有一个异步服务器,运行的是稍微修改过的版本。这一次只允许一个客户端加入 我的问题是,我可以为它使用TCP的每个事务打开和关闭套接字吗?如果我通过修改代码允许多个客户机加入,侦听更多的客户机,那么似乎有些消息是交叉连接的。例如,如果我尝试从两个客户端从服务器下载一个文件,则最后启动的客户端将获得该文件,而第一个客户端将超时。或者,如果我开始从一个客户机发送一些数据,然后从另一个客户机发送,那么服务器会同时收到这两种数据 由于我的程序不需要像游戏一样的高性能,在每次事务中打开/关闭套接字是否有问题

我有一个异步服务器,运行的是稍微修改过的版本。这一次只允许一个客户端加入

我的问题是,我可以为它使用TCP的每个事务打开和关闭套接字吗?如果我通过修改代码允许多个客户机加入,侦听更多的客户机,那么似乎有些消息是交叉连接的。例如,如果我尝试从两个客户端从服务器下载一个文件,则最后启动的客户端将获得该文件,而第一个客户端将超时。或者,如果我开始从一个客户机发送一些数据,然后从另一个客户机发送,那么服务器会同时收到这两种数据

由于我的程序不需要像游戏一样的高性能,在每次事务中打开/关闭套接字是否有问题,或者是否有更好的方法来处理多个客户端


编辑-我忘了提到侦听器本身在整个生命周期中保持打开状态,但是每个客户机都会为事务本身打开和关闭一个新套接字。在MSDN链接中的代码中,变量是handler。

在打开和关闭套接字时会有开销,因此在侦听端的简短回答是“否”。不过这只是最好的做法,所以如果你不担心这一点,那么就使用任何有效的方法


对于客户端,套接字的使用实际上取决于您计划发送数据的频率。如果不经常,那么短时间打开插座可能是正常的。如果您注意到任何类型的“串扰”,这很可能是由于代码中的错误造成的。对于一些参考资料,请查看MSDN上的TcpClient和TcpListener类。

打开和关闭套接字时会有开销,因此在侦听端的简短回答是“否”。不过这只是最好的做法,所以如果你不担心这一点,那么就使用任何有效的方法


对于客户端,套接字的使用实际上取决于您计划发送数据的频率。如果不经常,那么短时间打开插座可能是正常的。如果您注意到任何类型的“串扰”,这很可能是由于代码中的错误造成的。对于某些引用,请检查MSDN上的TcpClient和TcpListener类。

用于侦听的套接字通常在应用程序的生命周期内保持打开状态,例如,对于HTTP,它是端口80上的TCP套接字。每个连接的客户机基本上只存在于它自己的“会话”中。我相信他让侦听套接字保持打开状态,如果我没有理解错误的问题,他正在谈论打开和关闭客户机sockets@HanletEsca尼诺·耶普,我可能误解了OP。如果你说这是一个与客户相关的问题,那么在原始帖子中可能没有足够的信息来了解可能导致问题的原因。我可能也理解了问题LOL,不确定他在谈论哪个套接字。对不起,我应该在那里更清楚一些。我的意思是在整个应用程序中保持侦听器打开,但在MSDN代码中保持打开和关闭新的客户端套接字,这是一个名为handler的变量。用于侦听的套接字通常在应用程序的生命周期内保持打开,例如,对于HTTP,它是端口80上的TCP套接字。每个连接的客户机基本上只存在于它自己的“会话”中。我相信他让侦听套接字保持打开状态,如果我没有理解错误的问题,他正在谈论打开和关闭客户机sockets@HanletEsca尼诺·耶普,我可能误解了OP。如果你说这是一个与客户相关的问题,那么在原始帖子中可能没有足够的信息来了解可能导致问题的原因。我可能也理解了问题LOL,不确定他在谈论哪个套接字。对不起,我应该在那里更清楚一些。我的意思是在整个应用程序中保持侦听器打开,但在MSDN代码中保持打开和关闭新的客户端套接字,这是名为handler的变量。