C# 中带有接受列表的 Tcp 服务器
Tcp server with accept list in C#
我有一个 tcp server/client 系统,我只想接受特定的客户端,所以我创建了一个接受列表并在接受后检查客户端 ip,如果不在接受列表中则关闭连接.由于客户端数量众多,此解决方案会导致性能问题。
如何在接受连接之前获取客户端 ip?或者还有其他方法可以解决这个问题吗?
我的代码:
TcpClient tcpClient = listener.AcceptTcpClient();
if (!acceptList.Contains(tcpClient.Client.RemoteEndPoint))
{
tcpClient.Close();
continue;
}
据我所知,在 C# 中接受客户端之前,您无法访问远程端点信息。
在非托管代码中,应用程序可以通过在 WSAAccept()
调用中提供回调方法来决定是否接受连接。或许只要具备足够的 P/Invoke 技能,您就可以自己做出这样的决定;不过,我怀疑这样做是否值得。
还想知道您处于什么情况,这些 "rogue clients" 导致了性能问题。您真的会收到数以千计的意外连接尝试吗?您可以考虑改用防火墙。
我有一个 tcp server/client 系统,我只想接受特定的客户端,所以我创建了一个接受列表并在接受后检查客户端 ip,如果不在接受列表中则关闭连接.由于客户端数量众多,此解决方案会导致性能问题。 如何在接受连接之前获取客户端 ip?或者还有其他方法可以解决这个问题吗?
我的代码:
TcpClient tcpClient = listener.AcceptTcpClient();
if (!acceptList.Contains(tcpClient.Client.RemoteEndPoint))
{
tcpClient.Close();
continue;
}
据我所知,在 C# 中接受客户端之前,您无法访问远程端点信息。
在非托管代码中,应用程序可以通过在 WSAAccept()
调用中提供回调方法来决定是否接受连接。或许只要具备足够的 P/Invoke 技能,您就可以自己做出这样的决定;不过,我怀疑这样做是否值得。
还想知道您处于什么情况,这些 "rogue clients" 导致了性能问题。您真的会收到数以千计的意外连接尝试吗?您可以考虑改用防火墙。