2014-09-27 66 views
2

在非Windows商店.net應用程序的UDP響應,我發送UDP請求,並同步讀取其響應(使用的System.Net.Sockets類),如下所示:現在的Windows商店應用(贏8.1):閱讀使用DatagramSocket類

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
socket.Connect(endPoint); 
socket.Send(byteArray); 
socket.Receive(byteArray); 

,我試圖做同樣的事情在Windows商店應用 - 視窗8.1(使用Windows.Networking.Sockets的DatagramSocket類):

DatagramSocket udpSocket = new DatagramSocket(); 
udpSocket.MessageReceived += SocketOnMessageReceived; 
await udpSocket.ConnectAsync(new HostName(server), port); 
var udpWriter = new DataWriter(udpSocket.OutputStream); 
udpWriter.WriteBytes(msgBytes); // send the msg 
await udpWriter.StoreAsync(); 

我現在面臨的問題是,事件處理程序「SocketOnMessageReceived」永遠不會被調用。我錯過了什麼?

我已經啓用的能力「專用網絡(客戶&服務器)」目前。當我嘗試使用「Internet(客戶端&服務器)」功能的相同代碼時,該應用程序崩潰。

我不是一個網絡的概念專家,我是新來的Windows商店應用的開發,並且可以非常感激,在這裏使用了一些指導。

謝謝。

回答

2

解決了!必須調試崩潰的原因。事實證明,當我收到UDP消息時,我發射了一個應用程序級別的事件,並且因爲我沒有在UI線程上觸發事件而崩潰。來自Windows 8.1設備的錯誤報告/崩潰轉儲沒有顯示此信息,因此不知道是什麼導致了錯誤。

的 「udpSocket.BindEndpointAsync(主機,端口)」 似乎並不需要。

我只是做「udpSocket.ConnectAsync(主機,端口)」,作爲前+發送請求字節,的messageReceived處理程序被調用。我現在正在使用UI線程調度程序,並通過我的應用程序級事件傳播UDP響應。

乾杯。

相關問題