gpt4 book ai didi

C TCP套接字无法接收文件

转载 作者:行者123 更新时间:2023-11-30 18:46:27 25 4
gpt4 key购买 nike

我正在尝试用 C 编写套接字之间的简单文件传输。我的客户端代码如下所示:

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char **argv){
int sockfd, n;
struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_STREAM,0);

servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(22000);

inet_pton(AF_INET, "127.0.0.1", &(servaddr.sin_addr));

connect(sockfd,(struct sockaddr *)&servaddr, sizeof(servaddr));

FILE* fp;
fp = fopen("text.txt", "r");
sendfile(sockfd, fp, NULL, 100);
}

我的服务器代码如下所示:

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
int listen_fd, comm_fd;

struct sockaddr_in servaddr;

listen_fd = socket(AF_INET, SOCK_STREAM, 0);

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);

bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));

listen(listen_fd, 10);

comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);

int bytes;
char rec[100];

FILE * fp;
fp = fopen("random.txt", "w");

while((bytes = read(comm_fd, rec, 100)) > 0){
fwrite(rec, 1, bytes, fp);
}
}

如您所见,我正在将 text.txt 文件从客户端发送到服务器。然后在服务器上,我尝试读取它并将内容放入 while 循环中的 random.txt 中,但是当我执行它们时,客户端完成工作,服务器不会停止工作,并且 中没有写入任何内容>随机.txt。你能说出原因吗?

最佳答案

sendfile 期望文件描述符作为第二个参数,而不是 FILE *。如果您在代码中包含了所有必需的头文件,您将在编译过程中收到相应的错误消息。

要获取文件描述符,请使用 open 打开文件,即替换行

FILE* fp;
fp = fopen("text.txt", "r");

int fp;
fp = open("text.txt", O_RDONLY);

此外,对于生产版本,不要忘记检查 openconnectbind 等函数的错误返回值。 ..并在不再使用文件和套接字时关闭它们。

关于C TCP套接字无法接收文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51463231/

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