TcpListener如何获取已连接的客户端?

4

我有一个TcpListener与多个客户端连接。我能否获取所有连接的客户端列表?


@BewareSalah 当你接受它们时,可以手动将TcpClient保存在列表中。 - tchelidze
2个回答

3
我认为最好的方法就是在打开连接时将客户端添加到列表中:
public TcpClient connectedClients = new list<TcpClient>();

public void ConnectClient(int ip, int port)
{
    tcp.Connect(ip, port);
    connectedClients.Add(tcp);
}

如果您断开其中一个客户端连接:
public void DisconnectClient(int ip, int port)
{
    tcp.Close();
    connectedClients.RemoveRange(0, connectedClients.Length)
}

自从关闭TcpClient时所有连接都会断开,因此您最好清除列表。
希望这可以帮助。

如果其中一个客户端断开连接怎么办?如何将其从列表中移除? - Bewar Salah

3
当您在服务器上接受连接时,可以将客户端放入列表中。
TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);

// Start listening for client requests.
server.Start();

List<TcpClient> listConnectedClients =  new List<TcpClient>();
while(true)
{
    TcpClient client = server.AcceptTcpClient();
    listConnectedClients.Add(client);
}

我认为这是唯一的方法;-) - code4life
是的,我查看了文档,但没有找到一个可以提供已接受连接列表的方法或属性。 - frostedcoder
2
如果其中一个客户端断开连接怎么办?如何将其从列表中移除? - Bewar Salah
@BewarSalah 每次有新的客户端连接时,您需要打开一个新的线程,并打开网络流以从客户端读取数据。如果出现SocketException等异常或者关闭了客户端连接,则需要将其从列表中删除。请注意,这里需要使用线程安全的列表。 - frostedcoder
@BewarSalah:你可以参考以下内容:Socket连接: https://msdn.microsoft.com/zh-cn/library/system.net.sockets.tcplistener(v=vs.110).aspx 线程安全列表:https://dev59.com/MWkw5IYBdhLWcg3wSovA - frostedcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接