2015-02-24 79 views
-2

我在尝试验证网站是否启动。我使用TcpClient拨打网站,它工作正常,但是当我使用webrequest为同一网站它会引发404错误。Tcpclient和webRequest的区别

TcpClient和webRequest的功能有什么不同?

var client = new TcpClient(); 
client.Connect("android.clients.google.com", 80); 

var request = WebRequest.Create("http://android.clients.google.com"); 
var resp = request.GetResponse(); 
+1

在TcpClient上,你只是连接到服务器,而不是检索请求的页面内容,而第二次你得到的内容。当你阅读TcpClient的流时,你会得到什么? – Prix 2015-02-24 12:30:06

+1

你是什么意思,它工作正常?您的TcpClient代码永远不会尝试发出GET命令。 WebRequest建立连接,发送GET请求并处理结果。 WebRequest实际上使用TcpClient来发出请求 – 2015-02-24 12:30:32

回答

4

是什么TcpClient的和的WebRequest的功能区别?

A TcpClient是TCP客户端套接字的一个包装,可让您与任何TCP服务器进行通信。用于与该服务器通信的application protocol将由您的代码实现。您的代码仅连接到HTTP服务器,但不与其通信。

HttpWebRequest不仅处理TCP层,而且处理HTTP layer。这使您可以对任何HTTP服务器执行Web请求。您的代码执行GET请求http://android.clients.google.com,其中doesn't exist,因此您收到404

为了解决您的初始问题:Web服务器响应给定端口上的套接字连接或甚至返回HTTP响应的事实可能会或可能不会意味着该站点被视为“启动”,并且获得200响应。是否收到Twitter's "failwhale"表示该网站是“up”?取决于你实际尝试做什么,可能需要不同的方法。有时候最好是发起你想要的请求,而不是事先“ping”这个站点。

0

404错误测量表明Web服务器在线,但没有这样的文件。错误是由Web服务器返回的,而不是在客户端。换句话说,测试是可以的。使用真正离线的Web服务器检查状态 - 必须获得连接超时,端口关闭或类似的状态。无论如何,为了这个目的,最好使用TcpClient。