2012-01-06 74 views
2

我試圖模擬ping操作來確定是否可以訪問遠程主機。我找不到任何確鑿的代碼示例爲WP7做這個,所以我想我會嘗試以下。 我在尋找的是確認這是否是適當的方式來做到這一點。模擬WP7中的PING操作

Socket socket = 
       new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

     SocketAsyncEventArgs args = new SocketAsyncEventArgs(); 
     args.RemoteEndPoint = new DnsEndPoint (someIP, 80); // use HTTP port 80 
     args.Completed += (obj, eva) => 
     { 
      if (eva.SocketError != SocketError.Success) 
      { 
       //raise an error or set a view model property indicating error      
      }     
      socket.Close(); 
     }; 
     socket.ConnectAsync(args); 

回答

2

除非事情在芒果都變了,你真的只能達到與HTTP或HTTPS其他主機呢 - 所以「可達」的真正含義「正在監聽的已知URL的Web請求」 ......所以,最簡單的方法是向相關服務器發出一些無害的Web請求。 WebClient可能是最簡單的方法,但根據我的經驗,它在UI線程上的工作量比您預期的要多,因此我最終使用了較低級別的HttpWebRequest。對於單個ping請求,您可以使用WebClient

+0

我不知道如何實現Ping,但套接字現在支持芒果。 – 2012-01-06 07:41:38

+0

@Jon:我更新了代碼以專門連接到端口80,並將SocketError屬性設置爲「成功」。你是否認爲使用套接字使這個檢查比使用WebClient或HttpWebRequest更有效率? – 2012-01-06 07:44:01