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ページの「Remarks」セクションに、必要なプロパティとイベントをすべて設定しました。
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()の適切な使用方法があります - 今、一般的にのWindows Phone 7でとSystem.Net.Socketsに - だけWP7で、このためのオプションをあるように思われます。
お手数ですがお寄せいただきありがとうございます。
...そうでなければ、あなたはこの例外が発生します。)(SendTAsyncのCompletedイベントからReceiveFormAsync()を呼び出す必要があります。私は何らかの理由でReceiveFromAsyncも例外になります。 –
同じ問題も同じです。 – IDWMaster
同じ問題があります:| – Antimony