如何使用 SimpleTcp 创建多个客户端?

How to make multiple clients with SimpleTcp?

我有 TCP/IP 连接。我想要一个多重连接。我正在使用 SimpleTcp。它对于单连接非常简单和有用。不幸的是,我不知道如何使用 SimpleTcp 建立多个连接。

下面的代码是用于单连接的。

public void EthernetConnect()
    {
        try
        {
            string IpAddress = Ip.Text;
            int Port = Convert.ToInt32(PortName.Text);
            SimpleTcpClient client = new SimpleTcpClient(IpAddress, Port, false, null, null);
            if (!client.IsConnected)
            {

                client.Connect();
                if (client != null)
                {
                    if (client.IsConnected)
                    {
                        Console.WriteLine("Connected");
                        client.Events.DataReceived += EthernetDataReceived;
                        client.Events.Connected += EthernetConnected;
                        client.Events.Disconnected += EthernetDisconnected;
                        timer.Start();
                    }
                    else
                    {
                        Console.WriteLine("Not Connected");
                    }
                }
            }
            else
            {
                client.Events.DataReceived -= EthernetDataReceived;
            }

        }
        catch
        {

        }
    }

已接收以太网数据

private void EthernetDataReceived(object sender, DataReceivedFromServerEventArgs e)
    {
        try
        {
            var Data = e.Data;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }

    }

单连接中的EthernetDataReceived函数如何在多连接中使用?为每个 link 创建一个单独的函数听起来很荒谬。

我可以使用 SimpleTcp 以外的其他结构。但我是初学者,请帮忙?

EthernetDataReceived 只是一个事件处理程序,可用于处理来自任何 SimpleTcpClient 对象的 DataReceived 事件。您可以将其视为可以由任何线程中的任何对象调用的方法。

Isn't there a problem if data comes from all of them at the same time?

然后每个引发的事件都会调用一次该方法。只要您不读取或修改事件处理程序中的任何共享数据,这就不是问题。如果这样做,您需要使方法线程安全,这是它自己的主题。

Also, how do I know which server data is coming from?

您应该能够转换 sender 参数并检查 SimpleTcpClient:

的属性
private void EthernetDataReceived(object sender, DataReceivedFromServerEventArgs e)
{
    SimpleTcpClient client = (SimpleTcpClient)sender;
    //...

}

或者检查 DataReceivedFromServerEventArgs 是什么。