2012-04-17 3 views
0

이 코드 예제 인 http://msdn.microsoft.com/en-us/library/tst0kwb1.aspx을 사용하여 메시지를주고받을 수있는 콘솔 UDP 서버를 만들었습니다.WinForms의 UDP 클라이언트?

하지만 콘솔 응용 프로그램이 아니기를 바라며 Forms를 사용하고 싶습니다. 내 응용 프로그램에서 메시지 보내기 기능을 성공적으로 구현했지만 청취자를 작동시키는 방법을 모르겠습니다.

여기는 메시지를 수신하기위한 코드입니다. 아무 것도하지 않습니다.
참고 :이 코드를 버튼 클릭 이벤트 코드 바로 아래에 넣습니다.

private void StartListener() 
    { 
     bool done = false; 
     UdpClient listener = new UdpClient(listenPort); 
     IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); 

     try 
     { 
      while (!done) 
      { 
       this.lblMessage.Text = "Waiting for broadcast"; 
       byte[] bytes = listener.Receive(ref groupEP); 

       this.lblRecieve.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length); 
      } 

     } 
     catch (Exception e) 
     { 
      this.lblMessage.Text = e.ToString(); 
     } 
     finally 
     { 
      listener.Close(); 
     } 
    } 

이 코드

분명히 잘못된 것입니다,하지만 난 전에 C#에서 일을 해본 적이없는이 콘솔 샘플 코드는 내가 UDP 서버에 대해 찾을 수있는 유일한 가이드였다.

여기는 메시지를 보내는 코드입니다. 완벽하게 작동합니다.

private void btnSend_Click(object sender, EventArgs e) 
    { 
     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPAddress broadcast = IPAddress.Parse("192.168.0.105"); 
     byte[] sendbuf = Encoding.ASCII.GetBytes("test"); 
     IPEndPoint ep = new IPEndPoint(broadcast, listenPort); 
     s.SendTo(sendbuf, ep); 
     this.lblMessage.Text = "Sent Message"; 
    } 

편집 :

내가 당신에게서 가지고 도움을 주셔서 감사합니다, 대신 일을 내 자신의 깨진 코드를 조정, 나는 다른 코드는 내가 원하는 것처럼 작동하도록 조정할 발견했다.

UDP datagram code for server client application in C#

내가 빌린 코드이며 제대로 작동하지 않는 정지()을 제외하고, 완벽하게 작동하지만 큰 문제가되지 않습니다 및 구글로 해결하기 어려운해서는 안됩니다.

나는 당신이 나에게 준 링크로부터 아직도 많은 것을 배웠다.

답변

0

청취자를 등록해야합니다. 다음 문서를 확인하십시오. 그것은 아마 작동

Events Tutorial

+0

답장을 보내 주셔서 감사합니다.이 자습서를 살펴 보겠습니다. – Adam

3

, 당신은 단지 그것을 볼 수 없습니다. 무한 루프로 UI 스레드를 끊으면 폼이 완전히 없어집니다. 레이블을 업데이트 할 수 없도록 페인트하지 않습니다.

UdpClient.BeginReceive()를 사용하거나이 코드를 실행하는 스레드를 만들어야합니다. 스레드를 사용하는 경우 Control.BeginInvoke()를 사용하여 레이블을 업데이트해야합니다.