C# 在C中使用TCP从客户端错误接收多个响应#
因此,我试图制作一个代码,其中TCP将接受所有涉及重复接受客户端的客户端,但当我使用该代码时,我无法收到客户端的任何响应,因此如何解决此问题 消息框甚至不会在服务器上弹出 缓冲区位置的代码(后台工作程序): 当客户端将响应发送回服务器(后台工作程序)时,我将显示messagebox的代码: 下面是代码的一部分,其中客户端从服务器接收响应,然后向服务器发送消息(代码的一部分,但主要关注这一点):C# 在C中使用TCP从客户端错误接收多个响应#,c#,tcp,tcpclient,tcplistener,C#,Tcp,Tcpclient,Tcplistener,因此,我试图制作一个代码,其中TCP将接受所有涉及重复接受客户端的客户端,但当我使用该代码时,我无法收到客户端的任何响应,因此如何解决此问题 消息框甚至不会在服务器上弹出 缓冲区位置的代码(后台工作程序): 当客户端将响应发送回服务器(后台工作程序)时,我将显示messagebox的代码: 下面是代码的一部分,其中客户端从服务器接收响应,然后向服务器发送消息(代码的一部分,但主要关注这一点): 不能从非UI线程(在本例中为后台工作线程)更新UI 更改: while(true) {
不能从非UI线程(在本例中为后台工作线程)更新UI 更改:
while(true)
{
string data = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
if(data == "Response_Command_329873123709123")
{
MessageBox.Show(Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize)), "Client Response");
}
}
…致:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while(true)
{
string data = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
if(data == "Response_Command_329873123709123")
{
var message = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
worker.ReportProgress (0, message);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
MessageBox.Show((string)e.UserState, "Client Response");
}
我想我的缓冲区部分出错了,但我已经修复了
int databases = streamer.Read(buffers, 0, buffers.Length);
string data = Encoding.Unicode.GetString(buffers, 0, databases);
if (data == "Response_Command_329873123709123")
{
byte[] datacen = new byte[client.ReceiveBufferSize];
int main = streamer.Read(datacen, 0, datacen.Length);
var message = Encoding.Unicode.GetString(datacen, 0, main);
MessageBox.Show(message, "Client Response");
}
谢谢你的帮助,但是由于某些原因,这不起作用。我已经用你提供给我的新代码编辑了我的问题。那么代码中有错误吗?虽然我也启用了reportprocess@zhiyan114当然,你需要将上述模式应用到你的其他员工身上。对不起,我应该说清楚的。看看你是如何快速更新你的答案的,我已经把它修好了,是的,messagebox在后台工作程序中使用时确实会显示出来。@zhiyan114将你的声明作为一个答案发布给大家看
while(true)
{
string data = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
if(data == "Response_Command_329873123709123")
{
MessageBox.Show(Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize)), "Client Response");
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while(true)
{
string data = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
if(data == "Response_Command_329873123709123")
{
var message = Encoding.Unicode.GetString(buffer, 0,
streamer.Read(buffer, 0, client.ReceiveBufferSize));
worker.ReportProgress (0, message);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
MessageBox.Show((string)e.UserState, "Client Response");
}
int databases = streamer.Read(buffers, 0, buffers.Length);
string data = Encoding.Unicode.GetString(buffers, 0, databases);
if (data == "Response_Command_329873123709123")
{
byte[] datacen = new byte[client.ReceiveBufferSize];
int main = streamer.Read(datacen, 0, datacen.Length);
var message = Encoding.Unicode.GetString(datacen, 0, main);
MessageBox.Show(message, "Client Response");
}