Распечатайте количество полученных байтов - скорее всего, оно будет равно нулю, но подтвердите это.
Стоит проверить, что вы не получаете сообщение об ошибке - и, следовательно, не исчерпываете свой буфер.
[ Примечание: здесь и далее работа Pax - спасибо , и я преобразовал ее в вики сообщества, поэтому я не получаю очки заслуженного ответа. ]
Следующий код сделает это. Попробуйте и сообщите о результатах, пожалуйста.
while (1) {
numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0);
buf[numbytes] = '\0';
printf("Count: %d, Error: %d, Received: %s\n", numbytes, errno, buf);
// more code to react goes here
}
После редактирования вопроса:
Ошибка 111 - ECONNREFUSED - это не обычный код ошибки для recv (), но больше подходит для вызова открытого типа (open (), connect () и т. Д.).
В любом случае, ECONNREFUSED - это проблема на стороне сервера, а не на клиенте - сервер намеренно отказался принять ваше входящее соединение, поэтому вам нужно будет исследовать этот конец ссылки.
Чтобы проверить это, измените код так, чтобы он подключался к www.microsoft.com через порт 80, а затем отправьте пару строк любого старого мусора. Вы должны получить сообщение об ошибке от их веб-сервера, указывающее на неправильный HTTP-запрос. Это докажет, что на стороне клиента нет проблем.
Это то, что я получаю, когда набираю telnet www.microsoft.com 80
и набираю hello
, а затем ENTER
дважды:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 27 Nov 2008 01:45:09 GMT
Connection: close
Content-Length: 326
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Verb</h2>
<hr><p>HTTP Error 400. The request verb is invalid.</p>
</BODY></HTML>
Вы должны увидеть нечто подобное.