0

接続を閉じreadに、ソケットからの戻り値をゼロに強制する必要があります。

私は次のようなページのステートメントを読みました。

ファイルの終わりの条件を受け取った場合、または接続が閉じられた場合は、0が返されます。

しかし、送信した文字列の後にその条件を受信させる方法がわかりません。

誰か助けてもらえますか?

4

4 に答える 4

2

私はあなたがそれをすることができないことを恐れています。

ゼロを返したい場合はread、ソケットを閉じる必要があります。ソケットを閉じたくない場合は、プロトコルの一部として「通信の終わり」または「メッセージの終わり」を通知する必要があります。

これを行う一般的な方法は、各メッセージにその長さをプレフィックスとして付けることです。そうすれば、受信側はいつ完全なメッセージを読んだかを知り、それを使って何でもしたいことをします。

于 2012-10-27T09:13:06.250 に答える
1

ピアの read() または recv() がゼロを返すようにするには、ソケットを閉じるか、出力のためにシャットダウンする必要があります。いずれの場合も、その後は何も送信できません。その制約が適切でない場合は、意味がないため、要件を修正する必要があります。

于 2012-10-27T09:16:09.063 に答える
1

「ファイル終了状態」と「接続クローズ」状態の両方が、このソケットでこれ以上データを受信できないことを受信者に伝えます。魔法のデータを送信してそれをシミュレートすることはできません。

ソケットで呼び出す以外にclose、ソケットで使用shutdown(2)して、読み取り側または書き込み側のみを閉じることができます。これは、限られたケースでは役立つかもしれませんが、一般的なケースでは役に立ちません。

于 2012-10-27T09:16:19.297 に答える
1

おそらく、 poll(2)のような多重化システムコールが必要です。

Advanced Linux ProgrammingAdvanced Unix Programmingなどの優れた資料を読む必要があることは間違いありません。

アプリケーション メッセージを転送するために TCP/IP 転送が必要な場合は、(固定サイズのメッセージを使用するか、転送中に論理メッセージ サイズを知る方法を用意することによって) 自分でパッケージ化とフラグメント化を明示的に行う必要があります。TCP/IP 伝送は、ネットワークによって断片化される可能性があることに注意してください。

于 2012-10-27T10:03:27.673 に答える