跟踪TCP连接客户端的最佳方式是什么?
我写了一个小型演示客户端/服务器TCP套接字项目,基于我通过堆栈发现的许多教程。跟踪TCP连接客户端的最佳方式是什么?
当前该项目阻塞,并且我为每个客户端分配了一个线程。这远非理想,但我希望在使用Async之前熟悉基本套接字。
无我已阅读教程都真正解释如何跟踪汇报,等你当前连接的,所以我只是探讨过这个我自己:
private Dictionary<IPAddress, DateTime> connectedClients = new Dictionary<IPAddress, DateTime>();
所以我的问题是:追踪我连接的客户端的最佳方式是什么?
后续问题: 您如何处理测试?如果所有连接都来自同一台机器(相同的IP,相同的MAC),您如何确保条目是唯一的?对客户端对象的引用?一个GUID?都?
谢谢。
客户端和服务器的IP和端口的组合对于TCP连接是唯一的,对于UDP连接,客户端和服务器端口的组合是唯一的。
TCP连接:(服务器IP地址,服务器端口,客户端IP地址,客户端端口)
UDP连接:(服务器端口,客户端端口)
是唯一的。
如果多个客户端从同一台机器连接,则它们具有不同的端口组合。具有相同输出端口的客户端无法连接到同一端口上的同一台服务器。这是数据包在传输层为tcp连接复用的方式。 – 2013-04-29 04:50:48
我只是保留Sockets
的列表返回TcpListner.Accept()
。当客户端断开连接时,从列表中移除套接字。有关远程端点(用于报告)的信息可以从RemoteEndPoint
属性中检索。
你使用tcp还是udp? – Yaur 2013-04-28 22:01:38
TCP遗憾忘记提及这一点。 – Ray 2013-04-28 22:03:09