假设我有一个基本的C#套接字服务器。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地址,但它似乎是不可能的,直到我连接到客户端。看起来我毕竟会穿过客户端。
您可以通过接受然后关闭连接来完成此操作,但如果您无法及时找到,等待的连接最终会超时。 – nhouser9
@ nhouser9客户端被编程为在超时后重试连接尝试,所以这对我来说不是问题。我将编辑这个问题来澄清。 – xIcarus
然后除了性能之外没有真正的问题 - 如果服务器执行冗长的计算,您的客户可能会等待相当长的一段时间。但是,否则,没有任何东西阻止您接受连接,关闭连接并接受新的连接。 – nhouser9