2013-04-28 158 views
3

我写了一个小型演示客户端/服务器TCP套接字项目,基于我通过堆栈发现的许多教程。跟踪TCP连接客户端的最佳方式是什么?

当前该项目阻塞,并且我为每个客户端分配了一个线程。这远非理想,但我希望在使用Async之前熟悉基本套接字。

无我已阅读教程都真正解释如何跟踪汇报,等你当前连接的,所以我只是探讨过这个我自己:

private Dictionary<IPAddress, DateTime> connectedClients = new Dictionary<IPAddress, DateTime>(); 

所以我的问题是:追踪我连接的客户端的最佳方式是什么?

后续问题: 您如何处理测试?如果所有连接都来自同一台机器(相同的IP,相同的MAC),您如何确保条目是唯一的?对客户端对象的引用?一个GUID?都?

谢谢。

+0

你使用tcp还是udp? – Yaur 2013-04-28 22:01:38

+0

TCP遗憾忘记提及这一点。 – Ray 2013-04-28 22:03:09

回答

1

客户端和服务器的IP和端口的组合对于TCP连接是唯一的,对于UDP连接,客户端和服务器端口的组合是唯一的。

TCP连接:(服务器IP地址,服务器端口,客户端IP地址,客户端端口)

UDP连接:(服务器端口,客户端端口)

是唯一的。

+1

如果多个客户端从同一台机器连接,则它们具有不同的端口组合。具有相同输出端口的客户端无法连接到同一端口上的同一台服务器。这是数据包在传输层为tcp连接复用的方式。 – 2013-04-29 04:50:48

2

我只是保留Sockets的列表返回TcpListner.Accept()。当客户端断开连接时,从列表中移除套接字。有关远程端点(用于报告)的信息可以从RemoteEndPoint属性中检索。

相关问题