2

Linux では、

クライアントサーバー構造を使用して簡単なチャットプログラムをプログラミングしています。ファイル転送機能も含まれています。

クライアントがファイルのデータをサーバーに転送する際に使用するフォーマットをこのように設計しました。

(これがファイルデータであることを示す 1 バイト) (送信者、受信者を区別するための 2 バイトの情報) (現在のデータ送信サイズが何であるかを示す 1 バイト) (DATA..............)

上記の情報はbuf[]( char[])に保存されます

もちろん、送信者は write 呼び出しを使用してファイル データを送信し、受信者は read 呼び出しを使用してファイル データを受信します。

ソケット記述子を使用した読み取り、書き込み関数を使用すると、上記の形式が断片化できるのだろうか。

たとえば、送信者の書き込みsbuf[] = "abcdefgh"。受信者はrbuf[] = "abcdefgh"常に読み取りますか? またはまたはまたはまたはまたは....何かであるrbuf[]可能性がありますか?= "a""ab""abc""abcd"

4

1 に答える 1

1

Yes it can, and probably will. You should consider using recv and send instead of read and write. Using recv you may set the option MSG_WAITALL, that will make the read blocks until the full amount of data can be returned. (for SOCK_STREAM) Please take a look at the man recv/send for more information.

于 2013-04-12T04:46:30.800 に答える