0

既存のWindowsフォームアプリケーション内に単純なTCP/IP通信を実装しようとしています。通信部分を構成するコードには無限のwhileループがあり、サーバーが常にクライアントをリッスンしていると思います。別のスレッドで実行する方法に少しこだわっていることを除けば、私のアプリケーションでは問題なく動作します。以下にコードを投稿します。

private TcpListener tcpListener;
    private Thread listenThread;

 private void Form1_Load(object sender, EventArgs e)
    {

        startServer();

    }

private void startServer()
    {
        TcpListener serverSocket = new TcpListener(IPAddress.Parse("127.0.0.1"), 8888);
        TcpClient clientSocket = default(TcpClient);
        serverSocket.Start();

        clientSocket = serverSocket.AcceptTcpClient();

        while ((true))
        {
            try
            {

                NetworkStream networkStream = clientSocket.GetStream();
                byte[] bytesFrom = new byte[10025];
                networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                listBox1.Items.Add(" >> Data from client - " + dataFromClient);
                string serverResponse = "Server acknowledges the request - " + dataFromClient;
                Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
                networkStream.Write(sendBytes, 0, sendBytes.Length);
                networkStream.Flush();
                listBox1.Items.Add(" >> " + serverResponse);


            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }



        }
    }

この問題についてアドバイスをいただければ幸いです。ありがとうございました!

4

1 に答える 1

0

BackgroundWorker を使用して、次のように「DoWork」メソッドでサーバーを呼び出します。

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        startServer() // Call here what you want to execute in another thread
    }
    }

}

ここで詳しく見ることができます

于 2012-07-23T19:19:29.590 に答える