2011-09-13 11 views
0

以下のコードでは、MonoDroid + Simulatorの下でUDPデータグラムを受信しません。しかし、同じコードはMonoTouchの下ではうまくいきます...udpClient.ReceiveはMonoDroid + Simulatorの下でUDPデータグラムを受信しません

私は同じコードが異なるプラットフォームで同様に動作するという保証はありません。しかし、一日の終わりには、iOSとAndroidでC#を使用することが期待されています。

System.Threading.Thread udpListener = new System.Threading.Thread(() => 
{ 
    System.Net.Sockets.UdpClient udpClient = new System.Net.Sockets.UdpClient(UDP_PORT); 
    while (true) 
    { 
    try 
    { 
     System.Net.IPEndPoint sender = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0); 
     byte[] bytes = udpClient.Receive(ref sender); 
     using (System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes)) 
     { 
     System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyMessageList)); 
     MyMessageList messages = serializer.Deserialize(ms) as MyMessageList; 
     if (messages != null) ParseNotificationMessages(messages); 
     } 
    } 
    catch (System.Exception exp) 
    { 
    } 
    } 
}); 
udpListener.IsBackground = true; 
udpListener.Start(); 

乾杯、パトリック

答えて

1

それはmonodroidする該当だ場合は必ず、しかし、UDPと、一般的なAndroidのテストのためにあなたに答えを確認する必要がありますない: How to receive data using UDP in Android?

は、この情報がお役に立てば幸いです。

+0

Juandeさん、ありがとうございました、あなたの答えは正しい方向に私を指摘しました。私は最終的にシミュレータで私のUDPデータグラムを取得することができます... – Patrick

0

奇数。これが私たちの試験の一つであるとして、UDP は、仕事をすべきである:

int Port = 9595; 

var server = new UdpClient(Port); 
server.BeginReceive(result => { 
     IPEndPoint sender = null; 
     var data = server.EndReceive(result, ref sender); 
     var value = Encoding.Unicode.GetString (data); 
     if (value != "hello there!") 
      throw new InvalidOperationException ("UDP data transfer failed!"); 
     RunOnUiThread (() => textview.Text += "\n\nRead data from UDP: " + value); 
     server.Close(); 
}, null); 

using (var client = new UdpClient()) { 
    var bytes = Encoding.Unicode.GetBytes("hello there!"); 
    client.Send(
     bytes, 
     bytes.Length, 
     new IPEndPoint(IPAddress.Loopback, Port)); 
} 

は今、上記のコードではなく、「本当の」デバイスのループバックデバイスを使用していますが、私は/それが動作することを期待し望んでいるだろう...

あなたはどのポートから読もうとしていますか? AndroidはLinuxカーネルを使用しているため、1024未満のポートへのアクセスは許可されたユーザーに限定されています。

また、すべてのネットワーク関連操作に必要なandroid.permission.INTERNET権限が欠落している可能性があります。

+0

助けてくれてありがとう – Patrick

+0

私は上記のコードをテストしましたが、問題は残ります。ループバックモードシミュレータではシミュレータに問題ありません。しかし、デスクトップとAndroidのシミュレータをチェックするとすぐに、私は "データ"に何も得ません。 – Patrick

+0

...ハム、Enterキー...私は自分のインターネットフラグが設定されていることを確認します。 (そしてWCF通信はOKです。) – Patrick

関連する問題