2015-02-24 2 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

+1

Что значит хорошо работает? Ваш код TcpClient никогда не пытается выполнить команду GET. WebRequest устанавливает соединение, отправляет запрос GET и обрабатывает результаты. WebRequest фактически использует TcpClient для выдачи запросов –

ответ

4

чем разница в функциональности TcpClient и WebRequest ??

A TcpClient является оберткой вокруг клиентского сокета TCP, позволяя вам связываться с любым сервером TCP. application protocol, используемый для связи с этим сервером, должен быть реализован вашим кодом. Ваш код просто подключается к HTTP-серверу, но не связывается с ним.

HttpWebRequest обрабатывает не только уровень TCP, но и HTTP layer. Это позволяет выполнять веб-запросы на любой HTTP-сервер. Ваш код выполняет запрос GET к http://android.clients.google.com, который doesn't exist, следовательно, вы получаете 404.

Для решения вашей исходной проблемы: тот факт, что веб-сервер отвечает на соединения сокетов на заданном порту или даже возвращает ответ HTTP, может или не означает, что сайт считается «вверх», а также получает 200 ответ. Получает ли получение Twitter's "failwhale" означает, что сайт «вверх»? В зависимости от того, что вы на самом деле пытаетесь сделать, могут потребоваться различные подходы. Иногда лучше всего выполнить запрос, который вы хотите, вместо того, чтобы «пинговать» сайт заранее.

0

404 ошибка означает, что веб-сервер находится в сети, но такого файла нет. Ошибка возвращается веб-сервером, а не на стороне клиента. Другими словами, тест в порядке. Проверьте статус на действительно автономном веб-сервере - вам нужно получить время ожидания соединения, порт закрыт или аналогичный. Во всяком случае, для этой цели лучше использовать TcpClient.