2012-11-05 46 views
3

我是關於使用網絡流客戶端服務器字符串發送和接收。我想用線程和thread.join將1000客戶端替換爲一個應用程序。但我無法解決這個問題。謝謝回覆。多線程客戶端發送突發字符串到服務器

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     sc = new SocketMe(); 
     sc.socketStart(); 
     for (int i = 0; i < 10; i++) 
     { 
      //sc = new SocketMe(); 
      //this.Dispatcher.Invoke((Action)(() => 
      //{ 
      nomor[i] = new Thread(sc.execution); 
      nomor[i].Start(10); 
      //})); 
     } 
    } 
public class SocketMe 
{ 
    public NetworkStream serverStream; 
    MainWindow mw = new MainWindow(); 
    public void socketStart() 
    { 
     mw.clientSocket = new TcpClient(); 
     try 
     { 
      mw.clientSocket.Connect("localhost", 4000); 
     } 
     catch (Exception e) 
     { 
      //mw.label3.Content = "Error ...." + e.StackTrace; 
     } 
    } 
    public void StringtoSend(String x) 
    { 
     try 
     { 
      socketStart(); 
      serverStream = mw.clientSocket.GetStream(); 
      byte[] outStream = System.Text.Encoding.ASCII.GetBytes(x); 
      serverStream.Write(outStream, 0, outStream.Length); 
      serverStream.Flush(); 

      byte[] inStream = new byte[10025]; 
      serverStream.Read(inStream, 0, (int)mw.clientSocket.ReceiveBufferSize); 
      string returndata = System.Text.Encoding.ASCII.GetString(inStream); 
      //textBox2.Text = "Data from Server : " + returndata; 
      Console.WriteLine("Data from Server : " + returndata); 
     } 
     catch (Exception ex) 
     { 
      //mw.label3.Content = ex.StackTrace; 
     } 
    } 
    public void execution(object data) 
    { 
     socketStart(); 
     string[] pertanyaan = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ,"'{0}'"};//isi one dengan pertanyaan-pertanyaan yang diinginkan 
     int i; 
     for (i = 0; i < 10; i++) 
     { 
      StringtoSend(pertanyaan[i]); 
      Thread.Sleep(1000); 
     } 
    } 
} 
+1

它是WPF嗎?添加標籤。 –

+0

'但我解決不了這個問題。'哪個問題? –

+1

「但是我解決不了這個問題,哪個問題?他不明白多線程的事實:) – DjSol

回答

0

您正在從10個線程訪問相同的功能而沒有同步! 試試這個(只是爲了好玩):

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     for (int i = 0; i < 10; i++) 
     { 

      this.Dispatcher.BeginInvoke((Action)(() => 
      { 
       SocketMe sc = new SocketMe(); 
       sc.socketStart(); 
       // etc... 
      })); 
     } 
    } 

然後閱讀關於線程同步)。

相關問題