linux tcp接收文件,linux下tcp编程,客户端给服务端传文件,服务端如何判断文件传输结束?...

你需要一个协议,用现成的或自己实现一种都可以。

参考例子

传输的文件内容可以用数据包表示,像这样

// 注意:你需要设置结构字段对齐。

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;

// 继续接收剩余的数据,直到整个完整的数据包。

// ...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值