2013-07-11 4 views
0

다음 코드를 사용하여 udp 소켓을 읽었습니다. 정상적으로 작동합니다. 이제 recv에서 '수신'을 호출 메인으로 전달해야합니다. 이것을 어떻게 할 수 있는가?Beginreceive/Endreceive passing parameters

try 
     { 
      client.BeginReceive(new AsyncCallback(recv), client); 
     } 


    private static void recv(IAsyncResult res) 
    { 

     try 
     { 
      UdpClient c = (UdpClient)(res.AsyncState); 

      IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 162);   
      byte[] received = c.EndReceive(res, ref RemoteIpEndPoint); 
      Console.WriteLine(ASCIIEncoding.ASCII.GetString(received)); 

      c.BeginReceive(new AsyncCallback(recv), c); 

     } 

     catch (Exception e) 
     { 
      Console.WriteLine(e); 

     } 
    } 

답변

1

닷넷 4.5에서는이 같은 async/await 사용할 수 있습니다

using (var udpClient = new UdpClient()) 
{ 
    try 
    { 
     udpClient.Connect(IPAddress.Any, 162); 
     UdpReceiveResult receiveAsync = await udpClient.ReceiveAsync(); 
     Console.WriteLine(Encoding.ASCII.GetString(receiveAsync.Buffer)); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 
} 
+0

당신은 그 주위에 루프가 필요하지 않습니까? 늘어나는만큼 코드는 하나의 패킷만을 잡아낼 수 있습니다. –