Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过UDP进行文本基本文件传输_C_Udp_File Transfer - Fatal编程技术网

C 通过UDP进行文本基本文件传输

C 通过UDP进行文本基本文件传输,c,udp,file-transfer,C,Udp,File Transfer,我正在尝试通过UDP发送文件,该文件可能使用64>1024字节进行发送,我遇到的问题是无法发送服务器看到的所有部分: 代码 服务器: 客户: FILE* fd = fopen("fooo.txt","w"); int offset = 0; do{ if (recvfrom(sockfd, tempString, 256, 0, (struct sockaddr*)&sAddr, &slen) < 0){ ERR("

我正在尝试通过UDP发送文件,该文件可能使用64>1024字节进行发送,我遇到的问题是无法发送服务器看到的所有部分: 代码 服务器:

客户:

 FILE* fd = fopen("fooo.txt","w");
    int offset = 0;
    do{
        if (recvfrom(sockfd, tempString, 256, 0, (struct sockaddr*)&sAddr, &slen) < 0){
            ERR("!! ?? recvfrom()");
        }
        fwrite(tempString, 1, 256, fd);
        printf("Received packet from %s:%d\nData: %s\n\n", inet_ntoa(sAddr.sin_addr), ntohs(sAddr.sin_port), tempString);
    }while(fread(tempString,1,256, fd) > 0);
正如您所看到的,只发送文本的第一部分。你知道为什么吗? PS:EOF是可以识别的,但不知为什么我的客户只得到文本的一部分


编辑:我很确定问题就在这一行:
}while(fread(tempString,1256,fd)>0)
在客户端…

在客户端打开文件时:

FILE* fd = fopen("fooo.txt","w");
文件是空的。然后你在里面写些东西:

fwrite(tempString, 1, 256, fd);
文件点指向文件的结尾。此时,如果您阅读它,您将立即到达EOF

fread(tempString,1,256, fd)
因此,do{}while循环将并且只会工作一轮

如果要在连接关闭时中断循环,应检查recvfrom()的返回值:

返回值:这些调用返回接收的字节数,如果发生错误,则返回-1。对等方执行有序关机后,返回值将为0


在客户端中打开文件时:

FILE* fd = fopen("fooo.txt","w");
文件是空的。然后你在里面写些东西:

fwrite(tempString, 1, 256, fd);
文件点指向文件的结尾。此时,如果您阅读它,您将立即到达EOF

fread(tempString,1,256, fd)
因此,do{}while循环将并且只会工作一轮

如果要在连接关闭时中断循环,应检查recvfrom()的返回值:

返回值:这些调用返回接收的字节数,如果发生错误,则返回-1。对等方执行有序关机后,返回值将为0