在 Linux 中,
我正在使用客户端-服务器结构编写简单的聊天程序。它还包括文件传输功能。
我设计了这样客户端向服务器传输文件数据时使用的格式。
(1 byte 表示这是文件数据) (2 byte 信息用来区分发送方,接收方) (1 byte 表示当前发送的数据大小) (DATA...................... .)
以上信息将存储在buf[]
(char[]
)
当然,sender使用write调用发送文件数据,receiver使用read调用接收文件数据。
我想知道上面的格式在使用套接字描述符读取、写入函数时会被分片。
例如,发件人写sbuf[] = "abcdefgh"
。接收者总是读取 rbuf[] = "abcdefgh"
吗?
或 rbuf[]
可以是 = "a"
或 "ab"
或 "abc"
或 “abcd”
或 .... 什么?
最佳答案
是的,它可以,而且很可能会。您应该考虑使用 recv 和 send 而不是 read 和 write。 使用 recv,您可以设置选项 MSG_WAITALL,这将使读取阻塞,直到可以返回全部数据。 (对于 SOCK_STREAM) 请查看 man recv/send 以获取更多信息。
关于c - Linux,使用Socket和读写功能,数据可以分片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15470155/