多线程客户端向服务器发送突发字符串

3

我尝试使用NetworkStream进行客户端与服务器之间的字符串发送和接收。我希望使用线程和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);
        }
    }
}

但我无法解决这个问题。哪个问题? - L.B
1
但我无法解决这个问题。哪个问题?他不理解多线程的事实 :) - DjSol
抱歉,我对此还很陌生。 - user1795688
1个回答

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...
             }));
        }
    }

然后阅读有关线程同步的内容 ;)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接