2

サーバーがポートをリッスンしている
リクエストは、ローカル クライアントからローカル PC で実行されているサーバーに送信されます。
以下は私のコードスニペットです

remote_len = sizeof(remote_addr);
if ((bytes=recvfrom(sockfd, buf, MAXBUFLEN , 0,
(struct sockaddr *)&remote_addr, &remote_len)) <= 0) {
    exit(1);
}

printf("remote ip = %s\n",inet_ntoa(remote_addr.sin_addr));

IPを印刷すると、0.0.0.0が表示されます??
これは印刷しようとしているリモート IP アドレスではありませんか?
編集:TCPソケットであり、バッファを正常に受信しました。

4

1 に答える 1

2

TCP recvfrom() が「from」を保存しないを参照してください- どうやら TCP ではサポートされていないようです。表示されているのは、元々そこにあったゼロバイトだけです。これremote_lenが 0 を返す理由です。アドレスが設定されていないためです。

そのリンクは、Windows 関連のドキュメントです。Linux の man ページには、「接続指向であるかどうかに関係なく、ソケットでデータを受信するために使用される可能性がある」としか書かれていないが、http://www.beej.us/guide/でその動作は見られない。 bgnet/output/html/multipage/recvman.html recvfrom は UDP 用であると書かれています。残念ながら、Harbison + Steele では言及されておらず、Unix Network Programming のコピーも見つかりません。

于 2013-10-25T20:34:56.980 に答える