2011-09-13 3 views
0

다음 코드와 함께 MonoDroid + Simulator에서 UDP 데이터 그램을받지 못합니다. 그러나 동일한 코드가 MonoTouch에서 잘 작동합니다 ...udpClient.Receive는 MonoDroid + 시뮬레이터에서 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와 일반 안드로이드 테스트를 위해 당신에 대한 답변을 확인해야되지 않음 :이 도움이 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

위의 코드를 테스트했지만 문제가 남아 있습니다. 루프백 모드 시뮬레이터에서 시뮬레이터로도 괜찮습니다. 그러나 내 데스크톱과 안드로이드 시뮬레이터 사이를 점검하자마자 "데이터"에 아무것도 얻지 못합니다. – Patrick

+0

... 흠, Enter 키 ... 인터넷 플래그가 설정되어 있는지 확인합니다. (그리고 WCF 통신은 괜찮습니다.) – Patrick

관련 문제