2013-02-21 39 views
1

我有一个异步服务器运行此MSDN article的稍微修改版本。这一次只允许一个客户端加入。我应该打开和关闭每个事务的套接字吗?

我的问题是,我可以打开和关闭每个事务(它使用TCP)的套接字吗?如果我允许多个客户端加入(通过修改代码来侦听更多的客户端),似乎有些消息是交叉连接的。例如,如果我尝试从两台客户机的服务器上下载文件,则无论哪个客户机最后一次启动都会获取该文件,并且第一次启动该文件。或者,如果我开始从一个客户端发送一些数据,然后从另一个客户端开始,服务器收到了两者的混合。由于我的程序不需要高性能(就像游戏一样),每个事务打开/关闭套接字是否有任何问题,或者是否有更好的方法来处理多个客户端?

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

回答

3

打开和关闭套接字有开销,所以简短答案是否定的(在聆听端)。尽管如此,如果您不担心这一点,那么使用任何作品都是最佳做法。

当涉及到客户端的套接字使用真正取决于您计划发送数据的频率。如果很少,那么短时间打开套接字可能是常态。如果您注意到任何类型的“串扰”,这很可能是由于代码中的错误。对于某些引用,请在MSDN上签出TcpClient和TcpListener类。

+0

HTTP如何管理而不会造成开销? – 2013-02-21 19:07:36

+0

套接字(用于收听)通常在应用程序的整个生命周期中保持打开状态,例如,对于端口80上是TCP套接字的HTTP。每个连接的客户端基本上都存在于它自己的“会话”中。 – MarcF 2013-02-21 19:10:17

+0

我相信他离开了听筒打开,如果我不明白这个问题是错的,他说的是打开和关闭客户端插座 – 2013-02-21 19:12:23

相关问题