受信したバイト数を出力してください - ゼロである可能性が高いですが、それを確認してください。
エラーが発生していないこと、つまりバッファがアンダーフローしていないことを確認する価値があります。
[注: ここから先は Pax の仕事です -ありがとうございます。これを Community Wiki に変換したので、不当に担当者ポイントを取得することはありません。]
次のコードはこれを行います。試してみて、結果を報告してください。
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 はクライアントではなくサーバー側の問題です。サーバーは意図的に着信接続の受け入れを拒否しているため、リンクのその側を調査する必要があります。
これをテストするには、ポート 80 で www.microsoft.com に接続するようにコードを変更してから、古いゴミを数行送信します。Web サーバーから、不正な形式の HTTP 要求を示すエラーが返されるはずです。これにより、クライアント側に問題がないことが証明されます。
これはtelnet www.microsoft.com 80
、入力してから2回入力すると、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>
似たようなものが表示されるはずです。