1

みんなこれを理解するのに少し苦労しています:私はメッセージをブロードキャストしてメッセージを受信するためのコード(c#)が機能するかどうかをテストしようとしています:

データグラム(この場合はホスト名)を送信するコードは次のとおりです。

public partial class Form1 : Form
{
    String hostName;
    byte[] hostBuffer = new byte[1024];
    public Form1()
    {
        InitializeComponent();
        StartNotification();
    }
    public void StartNotification()
    {

        IPEndPoint notifyIP = new IPEndPoint(IPAddress.Broadcast, 6000);

        hostName = Dns.GetHostName();
        hostBuffer = Encoding.ASCII.GetBytes(hostName);

        UdpClient newUdpClient = new UdpClient();
        newUdpClient.Send(hostBuffer, hostBuffer.Length, notifyIP);


    }
}

そして、データグラムを受け取るためのコードは次のとおりです。

 public partial class Form1 : Form
{
    byte[] receivedNotification = new byte[1024];
    String notificationReceived;
    StringBuilder listBox;

    UdpClient udpServer;
    IPEndPoint remoteEndPoint;

    public Form1()
    {
        InitializeComponent();
        udpServer = new UdpClient(new IPEndPoint(IPAddress.Any, 1234));
        remoteEndPoint=null;

        startUdpListener1();

    }

    public void startUdpListener1()
    {
        receivedNotification = udpServer.Receive(ref remoteEndPoint);
        notificationReceived = Encoding.ASCII.GetString(receivedNotification);

        listBox = new StringBuilder(this.listBox1.Text);
        listBox.AppendLine(notificationReceived);

        this.listBox1.Items.Add(listBox.ToString());
    }

}

コードを受信するために、リストボックス(listBox1)のみを持つフォームがあります。ここでの問題は、受信するコードを実行すると、プログラムは実行されますが、フォームが表示されないことです。ただし、関数call(startUdpListener1())にコメントすると、目的は提供されませんが、フォームは表示されます。何が問題なのですか?

4

1 に答える 1

1

udpServer.Receive()はおそらくブロッキング呼び出しであり、データを待機しています(取得していない)

于 2009-05-15T17:34:44.660 に答える