1

我有一个运行此MSDN 文章的略微修改版本的异步服务器。这一次只允许一个客户加入。

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

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

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

4

1 回答 1

4

打开和关闭套接字有开销,所以简短的回答是否定的(在监听端)。这只是最佳实践,所以如果您不担心这一点,请使用任何有效的方法。

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

于 2013-02-21T19:06:09.510 回答