假设我有一个基本的C#套接字服务器。
TcpListener listener = new TcpListener(8888);
listener.Start();
Socket clientSocket = listener.AcceptSocket();
这将接受来自客户端的第一个连接。
然而,假设我们有10个传入连接。我不希望接受所有10个连接,我想要列出所有挂起的连接并选择一个连接,我将接受并与之交换数据 - 我们可以假设我可以通过以下方式识别它们他们的IP地址。交换完成后,我将关闭套接字并选择一个不同的连接来交换数据 我不需要有超过1个活动连接,因为我一次只能为一个客户端服务。
这样的壮举有可能吗?或者我是否必须接受所有这些并通过它们?
编辑:客户端超时不是问题。客户端被编程为在超时的情况下定期重试其连接。
EDIT2:
经过大量的搜索,我找到了一个类似的问题。在您接受其连接之前,您似乎无法区分客户端。这是一个问题:
How to reject a connection attempt in c#?
我以为我至少可以告诉连接尝试来自的IP地址,但在我连接到客户端之前似乎不可能。看起来我毕竟是穿过客户的方式。
答案 0 :(得分:0)
您不接受所有连接,只接受一个。您只需执行AcceptSocket
,处理您的客户端,然后断开连接并接受另一个客户端,例如在while(listener.Pending())
循环中。