gpt4 book ai didi

c - 使用 TCP 应用程序发送超过 65536 字节

转载 作者:行者123 更新时间:2023-11-30 15:49:46 28 4
gpt4 key购买 nike

我想知道,两个简单的程序如何将文本文件从发送方传输到接收方,发送超过 65536 字节(IP 数据包的最大大小)。这是发件人:

 FILE *fp=fopen("file_to_send.txt","r");
char msg[65536];
len = strlen(msg)+1;
nwrite=0;
printf ("write()\n");
fflush(stdout);
do{
n=write(socketfd, &(msg[nwrite]), len-nwrite);
nwrite+=n;
}
while( (n<0) && (errno==EINTR) );

这是接收者:

#define MAXSIZE 65536
.....
char buf[MAXSIZE];
nread=0;
do{
n=read(socketfd, &(buf[nread]), MAXSIZE ) ;
fflush(stdout);
nread+=n;
}while( (n<0) && (errno==EINTR) );

如果 file_to_send 权重小于 65536,它会起作用,但如果它更大,我会丢失部分文本。抱歉我的英语不好。

最佳答案

什么是最大尺寸?

在接收器中,您收到的 MAXSIZE 可能大于缓冲区本身。

您应该在每个循环中将缓冲区传输到标准输出,这样缓冲区中始终有空间用于下一次读取。

char buf[65536];
nread=0;
do{
n=read(socketfd, buf, 65536);
if (n > 0) {
n=write(stdout, buf, n);
fflush(stdout);
nread+=n;
}
} while( (n>0) || (errno==EINTR) );

另请检查 Davide Berra 的答案,以修复发送者和接收者中的循环条件。

关于c - 使用 TCP 应用程序发送超过 65536 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16102028/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com