18,356
社区成员
发帖
与我相关
我的任务
分享
// 传输的数据块MAX_BUFFER等于1024
typedef struct
{
size_t size; // 发送的数据的大小
char buffer[MAX_BUFFER]; // 数据内容
bool end; // 结束标志,true结束, false继续
}DATABLOCK;
/////////////////////////////////////////////////////////////////////
// tcp 客户端发送数据的部分代码
DATABLOCK data_block;
FILE *fp = NULL;
if (fopen_s(&fp, "src.txt", "r"))
{
return 0;
}
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);// 文件大小
rewind(fp);
int count = 0;
while (file_size > 0)// 文件中的数据还没有发送完,继续发送
{
memset(data_block.buffer, 0, MAX_BUFFER);
size_t send_size = fread(data_block.buffer, 1, MAX_BUFFER, fp);
data_block.size = send_size;
// 当发送的数据不等于MAX_BUFFER,说明这是最后一小块buffer了
data_block.end = ((send_size != MAX_BUFFER) ? true : false);
send(sockClient, (const char*)&data_block, sizeof(DATABLOCK), 0);
file_size -= MAX_BUFFER;
}
//////////////////////////////////////////////////////////////////////////////////////////
// tcp 服务器端接收数据的部分代码
FILE *fp = NULL;
fopen_s(&fp, "dest.txt", "w");
DATABLOCK data_block;
while (1)
{
memset(data_block.buffer, 0, MAX_BUFFER);
recv(sockConn, (char*)&data_block, sizeof(DATABLOCK), 0);
fwrite(data_block.buffer, 1, data_block.size, fp);
if (data_block.end)
{
break;
}
}