c#中的TCPIP连接和另一个线程中的数据发送/接收

我的TCPIP连接表单程序有问题。

我有一个代码,我正在尝试从服务器发送和接收一些数据。 我的应用程序的主要问题是如何协调一些线程:

  • myListenThread – 从服务器收听数据
  • myReadStreamThread – 从服务器读取数据
  • System.Threading.Thread – 主线程例如。 将数据写入服务器
  • captureThread – 做另一件事,比如从相机中捕捉图像

我的部分代码:

private void buttonConnect_Click(object sender, EventArgs e) { try { Connect(); Connected = true; this.myListenThread = new Thread(new ThreadStart(Listen)); this.myListenThread.Start(); } catch { MessageBox.Show("Invalid host! Try again."); } } private void Listen() { this.myReadStreamThread = new Thread(new ThreadStart(ReadStream)); this.myReadStreamThread.Start(); while (Connected) { if (!myReadClient.Connected) { Connect(); } } } private void Connect() { IPAddress IP = IPAddress.Parse(textboxIP.Text); int PORT = Convert.ToInt32(textboxPORT.Text); this.myReadClient = new TcpClient(); this.myReadClient.Connect(IP, PORT);//SOMETIMES HERE'S AN ERROR this.myStream = this.myReadClient.GetStream(); Properties.Settings.Default.IP = Convert.ToString(IP); Properties.Settings.Default.PORT = Convert.ToString(PORT); Properties.Settings.Default.Save(); } private void ReadStream() { while (true) { try { this.myReadBuffer = new byte[this.myReadClient.ReceiveBufferSize]; this.myBufferSize = myStream.Read(myReadBuffer, 0, this.myReadClient.ReceiveBufferSize); if (myBufferSize != 0) { this.myString = Encoding.ASCII.GetString(myReadBuffer); //myDelegate myDel; //myDel = new myDelegate(Print); //richtextboxRead.Invoke(myDel); } } catch { break; } } } 

当我连接到服务器时,所有工作正常,但是当我想发送一些字符串时,由于线程而出现问题。

我决定发送字符串,通过单击Button3并等待我从服务器使用while循环接收字符串“1”:

  private void button3_Click(object sender, EventArgs e) { this.captureThread = new Thread(new ThreadStart(() => this.newGame())); this.captureThread.Start(); } private bool newGame() { string command = "12345abc"; if (Connected) { WriteStream(command); } while (myBufferSize == 0 && myString !="1") { } Thread.Sleep(2000); ...//doing other things } private void WriteStream(string command) { Connect(); this.myWriteBuffer = Encoding.ASCII.GetBytes(command); this.myStream.Write(this.myWriteBuffer, 0, command.Length); } 

并且出现连接和数据发送/接收问题时,它应该写我的字符串“命令” – 它没有反应。 MyBufferSize始终为0,myString始终为null。 当我单击Button3(在代码中分配)时,有时会出现关于连接的错误。 我认为这是因为在captureThread中我看不到来自其他线程的任何数据。 怎么解决?