3

私は、ネットワークストリームを使用してクライアントサーバー文字列を送受信することについてでした。そして、threadとthread.joinを使用して、1000クライアントを1つのアプリケーションに置き換えたいと思います。しかし、私はこの問題を解決することはできません。返信いただきありがとうございます。

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

1 に答える 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...
             }));
        }
    }

次に、スレッド同期について読んでください;)。

于 2012-11-05T11:52:38.533 に答える