我试图让我的Windows Phone 7 Mango应用程序侦听传入的UDP数据包,但有一段时间。我已安装Windows Phone 7.1 SDK和开发工具的新Beta 2版本。任何偏离我尝试从这MSDN sample结果在一个SocketException 10022,“提供了一个无效的参数”。在Windows Phone 7中异步接收UDP单播数据包的问题
我的代码粘贴在下面。我一直在尝试修改我在this stackoverflow post上找到的代码,但无济于事。当这条线到达时会产生异常:
synchronous = m_udpSock.ReceiveFromAsync(udpRecvArg);
我希望这里有人能够帮助确定哪里出了问题。我在用户按下按钮时调用“StartUnicastListen()”。先前将m_udpSock定义为一个类变量并将其设置为null。根据ReceiveFromAsync()MSDN页面的“备注”部分,我已设置了所有必需的属性和事件。
private void StartUnicastListen()
{
m_udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
SocketAsyncEventArgs udpRecvArg = new SocketAsyncEventArgs();
udpRecvLoopStart(udpRecvArg);
}
private void udpRecvLoopStart(SocketAsyncEventArgs udpRecvArg)
{
byte[] udpRecvBuffer = new byte[2048];
udpRecvArg.SetBuffer(udpRecvBuffer, 0, udpRecvBuffer.Length);
udpRecvArg.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 11100);
udpRecvArg.Completed += new EventHandler<SocketAsyncEventArgs>(udpRecvArg_Completed);
udpRecv(udpRecvArg);
}
private void udpRecv(SocketAsyncEventArgs udpRecvArg)
{
bool synchronous = false;
try {
synchronous = m_udpSock.ReceiveFromAsync(udpRecvArg);
} catch (SocketException e) {
Log("recvUdp()\n" + e.SocketErrorCode + "\n" + e.ToString(), false);
return;
} if (synchronous)
udpRecvArg_Completed(this, udpRecvArg);
}
void udpRecvArg_Completed(object sender, SocketAsyncEventArgs udpRecvArg) {
EndPoint udpEp = udpRecvArg.RemoteEndPoint;
string msg = Encoding.UTF8.GetString(udpRecvArg.Buffer, udpRecvArg.Offset, udpRecvArg.BytesTransferred);
Log(udpEp + " " + msg,false);
udpRecv(udpRecvArg);
}
有这样有限的文件ReceiveFromAsync()的正确使用 - 这似乎是这个WP7上唯一的选项 - 在Windows Phone 7的一般和的System.Net.Sockets现在。
在此先感谢您提供的任何帮助。
我有一个类似的问题。出于某种原因,我也在ReceiveFromAsync上遇到异常。 –
同样的问题在这里。 – IDWMaster
同样的问题在这里:| – Antimony