UDPClient只接收一个数据报
问题描述:
我试图读取连续的UDP字节(或一次至少超过1个)。我的缓冲区是单个数据报/数据包(1000字节)的4倍大小。UDPClient只接收一个数据报
Byte[] receiveBytes = new Byte[4096];
UdpClient udpClient = new UdpClient(56885);
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
答
如果你想接收多个数据包,你应该考虑使用异步方法来接收它们。 UdpClient类有一个异步方式,在这个方法中你给它一个回调函数,然后继续进行其他处理(比如更新UI)。
Here is an example from the source:
public static bool messageReceived = false;
public static void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;
Byte[] receiveBytes = u.EndReceive(ar, ref e);
string receiveString = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine("Received: {0}", receiveString);
messageReceived = true;
}
public static void ReceiveMessages()
{
// Receive a message and write it to the console.
IPEndPoint e = new IPEndPoint(IPAddress.Any, listenPort);
UdpClient u = new UdpClient(e);
UdpState s = new UdpState();
s.e = e;
s.u = u;
Console.WriteLine("listening for messages");
u.BeginReceive(new AsyncCallback(ReceiveCallback), s);
// Do some work while we wait for a message. For this example,
// we'll just sleep
while (!messageReceived)
{
Thread.Sleep(100);
}
}
多少数据你送?你发送的速率是多少? – Jeff 2011-03-29 05:50:28