我根据我通过堆栈找到的一些教程编写了一个小的演示客户端/服务器TCP套接字项目。
目前该项目正在阻止,我将一个线程专门用于每个客户端。这远非理想,但我想在使用Async之前熟悉基本套接字。
我读过的所有教程都没有真正解释过如何跟踪当前的报告连接等,所以我只是自己探讨了这个:
private Dictionary<IPAddress, DateTime> connectedClients = new Dictionary<IPAddress, DateTime>();
所以我的问题是:跟踪我的连接客户端的最佳方法是什么?
后续问题: 你是如何处理测试的?如果所有连接都来自同一台机器(相同的IP,相同的MAC),那么如何确保条目是唯一的?对客户端对象的引用?一个GUID?既?
感谢。
答案 0 :(得分:2)
我会保留Sockets
返回的TcpListner.Accept()
列表。当客户端断开连接时,从列表中删除套接字。可以从RemoteEndPoint
属性中检索有关远程端点(用于报告)的信息。
答案 1 :(得分:1)
客户端和服务器的ip和端口组合对于TCP连接是唯一的,对于UDP连接,客户端和服务器端口的组合是唯一的。
TCP连接:(服务器IP地址,服务器端口,客户端IP地址,客户端端口)
UDP连接:(服务器端口,客户端端口)
是独一无二的。