2013-07-11 48 views
0

我正在使用下面的代碼讀取udp套接字,這很好。現在我需要將recv中的'received'傳回給主叫方。如何才能做到這一點。接受傳遞參數

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

在.NET 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

你不需要繞一個圈?據我可以看到,代碼將只捕獲一個數據包。 –