我有一个tcp服务器/客户端系统,我只想接受特定的客户端,所以我创建一个接受列表并在接受后检查客户端IP,然后关闭连接,如果它不在接受列表中。由于客户数量众多,此解决方案会导致性能问题。 如何在接受连接之前获取客户端IP?或者还有其他方法可以解决这个问题吗?
我的代码:
TcpClient tcpClient = listener.AcceptTcpClient();
if (!acceptList.Contains(tcpClient.Client.RemoteEndPoint))
{
tcpClient.Close();
continue;
}
答案 0 :(得分:0)
据我所知,在接受C#中的客户端之前,您无法访问远程端点信息。
在非托管代码中,应用程序可以通过在WSAAccept()
调用中提供回调方法来决定是否接受连接。也许有足够的P / Invoke技能你可以自己打电话;我怀疑这是值得的努力。
同样好奇你所处的情况,这些“流氓客户”正在导致性能问题。你真的得到了数以千计的不良连接尝试吗?您可以考虑使用防火墙。