2016-11-22 17 views
1

獲得來自SocketActivityTriggerDetails數據從MSDN的一個例子,我嘗試從與插座的經紀人我的後臺任務的DatagramSocketSocketActivityTrigger檢索接收到的數據。與DatagramSocket的

但在鏈接所示的例子是StreamSocket

public async void Run(IBackgroundTaskInstance taskInstance) 
{ 
    var details = taskInstance.TriggerDetails as SocketActivityTriggerDetails; 
    var socketInformation = details.SocketInformation; 
    switch (details.Reason) 
    { 
     case SocketActivityTriggerReason.SocketActivity: 
      var socket = socketInformation.StreamSocket; 
      DataReader reader = new DataReader(socket.InputStream); 
      reader.InputStreamOptions = InputStreamOptions.Partial; 
      await reader.LoadAsync(250); 
      var dataString = reader.ReadString(reader.UnconsumedBufferLength); 
      break; 
    } 
} 

我無法找到DatagramSocket對象接收到的數據,我們只能訪問到輸出流..

如何我可不可以做 ?

謝謝!

回答

0

我無法找到DatagramSocket對象接收到的數據,我們只能訪問到輸出流..

對於DatagramSocket對象,當我們需要接收數據,我們需要fitstly其註冊MessageReceived event,然後在其DatagramSocketMessageReceivedEventArgs中,我們可以使用它的GetDataReader method來獲得傳輸的數據。

對於後臺任務,代碼與official Socket activity trigger stream socket sample類似。但對於DatagramSocket,我們需要註冊此MessageReceived事件並處理後臺任務中的數據。

就比如這裏:

public async void Run(IBackgroundTaskInstance taskInstance) 
{ 
    var deferral = taskInstance.GetDeferral(); 
    try 
    { 
     var details = taskInstance.TriggerDetails as SocketActivityTriggerDetails; 
     var socketInformation = details.SocketInformation; 
     switch (details.Reason) 
     { 
      case SocketActivityTriggerReason.SocketActivity: 
       var socket = socketInformation.DatagramSocket; 
       socket.MessageReceived += Socket_MessageReceived; 
       break; 
      default: 
       break; 
     } 
     deferral.Complete(); 
    } 
    catch (Exception exception) 
    { 
     ShowToast(exception.Message); 
     deferral.Complete(); 
    } 
} 

private void Socket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) 
{ 
    using (var reader = args.GetDataReader()) 
    { 
     //TODO: read data here. 
    } 
} 
+1

@ grace-feng-msft謝謝你的回覆,但..我認爲你不明白** SocketActivityTrigger **背後的行爲。實際上,代理套接字取得了我們在前臺創建的DatagramSocket的所有權,當它接收到一個數據包時,它開始後臺任務。所以..訂閱MessageReceived事件**爲時已晚**,已經收到數據包:( –

+0

沒有人可以幫我嗎? –

+0

@ApynAOM你設法解決這個問題嗎? –

0

必須調用EnableOwnerShip,bindServiceName或bindEndPoint後TransferOwnerShip方法。我正在工作這個問題..