чем разница в функциональности 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" означает, что сайт «вверх»? В зависимости от того, что вы на самом деле пытаетесь сделать, могут потребоваться различные подходы. Иногда лучше всего выполнить запрос, который вы хотите, вместо того, чтобы «пинговать» сайт заранее.
На TcpClient вы просто подключаетесь к серверу, а не получаете содержимое запрошенной страницы, а на втором вы получаете контент. Что вы получаете, когда читаете поток TcpClient? – Prix
Что значит хорошо работает? Ваш код TcpClient никогда не пытается выполнить команду GET. WebRequest устанавливает соединение, отправляет запрос GET и обрабатывает результаты. WebRequest фактически использует TcpClient для выдачи запросов –