C# TCP客户端不是从所有客户端接收数据,而是只从一个客户端接收数据
所以我尝试从每个客户端接收所有数据,但出于某种原因,它只想从一个客户端接收数据(随机),不想从其他客户端接收数据,所以我做错了什么 backgroundworker将每个客户端注册到其自己的新backgroundworker的代码:C# TCP客户端不是从所有客户端接收数据,而是只从一个客户端接收数据,c#,tcplistener,C#,Tcplistener,所以我尝试从每个客户端接收所有数据,但出于某种原因,它只想从一个客户端接收数据(随机),不想从其他客户端接收数据,所以我做错了什么 backgroundworker将每个客户端注册到其自己的新backgroundworker的代码: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundW
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (true)
{
try
{
client = network.AcceptTcpClient();
streamer = client.GetStream();
worker.ReportProgress(0,"Client Accepted");
buffers = new byte[client.ReceiveBufferSize];
comboBox1.Invoke(new MethodInvoker(delegate {
comboBox1.Items.Add(client.Client.RemoteEndPoint.ToString() + "_" +
client.Client.LocalEndPoint.ToString()); }));
listConnectedClients.Add(client);
BackgroundWorker theworker = new BackgroundWorker();
theworker.DoWork += bgwhelper(client);
theworker.RunWorkerAsync();
} catch(Exception ex)
{
MessageBox.Show(ex.Message,"Client Connection Error");
client.Close();
streamer.Close();
Close();
}
}
处理每个客户端响应数据的代码:
public DoWorkEventHandler bgwhelper(TcpClient mainclients)
{
try
{
NetworkStream mainsteams = mainclients.GetStream();
int databases = mainsteams.Read(buffers, 0, buffers.Length);
string data = Encoding.Unicode.GetString(buffers, 0, databases);
if (data == "cmd1")
{
byte[] datacen = new byte[mainclients.ReceiveBufferSize];
int main = mainsteams.Read(datacen, 0, datacen.Length);
var message = Encoding.Unicode.GetString(datacen, 0, main);
MessageBox.Show(message,
mainclients.Client.RemoteEndPoint.ToString() + "_" +
mainclients.Client.LocalEndPoint.ToString() + "'s Response");
} else if (data == "cmd2")
{
}
} catch(Exception)
{
removeclient(mainclients);
}
return null;
}
不确定如何使用
client
,但由于这行代码client=network.AcceptTcpClient()代码>,它将始终包含最近创建的客户端。哦,好的,我想代码将在那里暂停,直到新的客户端连接,然后继续代码,但任何有助于解决此问题的解决方案?有关套接字,请参阅msdn示例。代码使用套接字,但您可以对继承套接字类的任何类使用vbsititue,如tclistener classYes,它将在那里暂停,但暂停后客户端将有一个对新创建的类的引用。同样,我不确定您如何使用客户端
。它可能会给你带来问题,也可能不会;取决于用法。如果您在其他任何地方都不需要它,则将client
设置为局部变量。现在它是一个类级变量,因此没有意义。