在Linux中,
我使用客户端 - 服务器结构编写简单的聊天程序。它也包括文件传输功能。
我设计了客户端将文件数据传输到服务器时使用的格式。
(显示这是文件数据的1个字节)(用于区分发送方,接收方的2字节信息)(1字节表示当前数据发送大小是多少)(DATA ............. 。)
以上信息将存储在buf[]
(char[]
)
当然,发送者使用写调用来发送文件数据,接收者使用read调用来接收文件数据。
我想知道使用套接字描述符读取,写入函数时,上面的格式可能会碎片化。
例如,发件人写sbuf[] = "abcdefgh"
。接收者总是读rbuf[] = "abcdefgh"
吗?
或rbuf[]
可以是= "a"
或"ab"
或"abc"
或"abcd"
或......某事?
答案 0 :(得分:0)
是的,它可以,而且可能会。你应该考虑使用recv和send而不是read和write。 使用recv,您可以设置选项MSG_WAITALL,它将生成读取块,直到可以返回全部数据。 (对于SOCK_STREAM) 请查看man recv / send以获取更多信息。