2

在 Linux 中,

我正在使用客户端-服务器结构编写简单的聊天程序。它也包括文件传输功能。

我设计了客户端将文件数据传输到服务器时使用的格式。

(1 字节显示这是文件数据)(2 字节信息用于区分发送方、接收方)(1 字节表示当前发送数据的大小)(DATA.......)

以上信息将保存在buf[]( char[])

当然,sender 使用 write 调用发送文件数据,receiver 使用 read 调用接收文件数据。

我想知道上述格式在使用套接字描述符读取、写入函数时是否会分片。

例如,发件人写sbuf[] = "abcdefgh"rbuf[] = "abcdefgh"接收器总是读吗?或rbuf[]可能是= "a""ab"或或"abc""abcd"或......什么?

4

1 回答 1

1

是的,它可以,而且可能会。您应该考虑使用 recv 和 send 而不是 read 和 write。使用 recv 您可以设置选项 MSG_WAITALL,这将使读取块直到可以返回全部数据量。(对于 SOCK_STREAM)请查看 man recv/send 以获取更多信息。

于 2013-04-12T04:46:30.800 回答