2009-05-15 3 views
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). Проблема заключается в том, что когда я выполняю полученный код, программа запускается, но форма не видна. Однако, когда я комментирую вызов функции (startUdpListener1()), цель не подана, но форма видна. Что происходит не так?

ответ

1

udpServer.Receive(), вероятно, блокировка вызова, ожидание данных (что он не получает)

+0

но привычка форма по крайней мере быть видимым? – Avik

+0

@Avik, ryansstack - это правильно. Вам нужно будет начать новый поток, чтобы избежать блокирующего вызова, или просто используйте udpServer.BeginReceive –