2012-01-06 73 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