【问题标题】:getting network streams using tcplistener for mulitple connections使用 tcplistener 为多个连接获取网络流
【发布时间】:2014-08-12 17:52:53
【问题描述】:

我正在尝试为我正在收听的每个客户端设置不同的网络流(使用 TCPListener) 这是一个示例代码:

while(listener.Pending())
{
Socket sock = listener.AcceptSocket();
NetworkStream stream = new NetworkStream(sock);
list.Add(stream);
}

我的问题是,该列表是否包含不同的网络流,每个客户端尝试建立连接? 太棒了

【问题讨论】:

    标签: c# sockets networking tcplistener networkstream


    【解决方案1】:

    是的,每个套接字您将获得一个 NetworkStream,Accepted 套接字是特定于客户端的。

    但是您误用了Pending 函数。您应该使用异步方法BeginAcceptSocketAcceptAsync。只要没有客户端尝试连接,while(listener.Pending()) 循环就会退出,这将有效地阻止您获得连接。

    【讨论】:

    • 但是如果有多个客户端尝试连接怎么办?在我全部接受之前,循环会起作用吗?我不在乎“迟到”的客户。
    • 不,除非所有客户端都在您打开服务器端口的同一时刻连接,否则它将无法工作。你可能想做这样的事情:while(expectingOtherClients) { var sock = listener.AcceptSocket() /* your original code here */ }
    • 我应该放什么而不是期待OtherClients?我不知道有多少客户端正在尝试连接...
    • 你说你不关心“迟到”的客户,所以我想你有办法区分“迟到”的客户和预期的客户......如果你不知道有多少客户正在尝试连接,您最好的选择仍然是接受所有人,然后expectingOtherClients 变为serverIsListening。如果不知道您要实施什么行为,恐怕我无法告诉您更多信息。您可以找到很多 TcpListener 示例,但每个示例都需要您知道何时要停止侦听传入连接。
    • 您根本不需要异步 IO 即可成功接受客户端。事实上,几乎所有套接字应用程序最好不要使用异步接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多