Linux,使用Socket和读写函数,可以将数据分段吗?

时间:2013-03-18 05:13:37

标签: c linux sockets network-programming system-calls

在Linux中,

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

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

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

以上信息将存储在buf[]char[]

当然,发送者使用写调用来发送文件数据,接收者使用read调用来接收文件数据。

我想知道使用套接字描述符读取,写入函数时,上面的格式可能会碎片化。

例如,发件人写sbuf[] = "abcdefgh"。接收者总是读rbuf[] = "abcdefgh"吗? 或rbuf[]可以是= "a""ab""abc""abcd"或......某事?

1 个答案:

答案 0 :(得分:0)

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