你需要一个协议,用现成的或自己实现一种都可以。
参考例子
传输的文件内容可以用数据包表示,像这样
// 注意:你需要设置结构字段对齐。
struct Packet {
uint32_t file_size;
uint8_t file_content[];
}
__attribute__((aligned(4), packed));
客户端根据需要传输的文件,构造并发送一个数据包
// 读取文件内容及大小
// file_content = ...
// file_size = ...
// 构造数据包
struct Packet *p = (struct Packet*) malloc(sizeof(struct Packet) + file_size);
p->file_size = file_size;
memcpy(p->file_content, file_content, file_size);
// 连接服务器
// int client = socket(...);
// connect(...);
// 发送数据包
send(client, p, sizeof(struct Packet) + file_size), 0);
// ...
而服务端读取包头便知文件大小,如
// int client = accept(...)
// int size = recv(client, buffer, ...)
if (size >= sizeof(struct Packet)) {
// 已经收到数据包头
struct Packet *p = (struct Packet*) buffer;
uint32_t file_size = p->file_size;
// 继续接收剩余的数据,直到整个完整的数据包。
// ...
}