c#套接字检查传入连接,一次只接受一个连接

时间:2016-05-03 23:38:53

标签: c# sockets

假设我有一个基本的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地址,但在我连接到客户端之前似乎不可能。看起来我毕竟是穿过客户的方式。

1 个答案:

答案 0 :(得分:0)

您不接受所有连接,只接受一个。您只需执行AcceptSocket,处理您的客户端,然后断开连接并接受另一个客户端,例如在while(listener.Pending())循环中。