如何使用 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
是什么。
我有 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
是什么。