如何在c语言中通过套接字从文件中读写另一个文件

如何在c语言中通过套接字从文件中读写另一个文件,c,sockets,system-calls,C,Sockets,System Calls,我尝试在客户端读取一个文件,在套接字上写入,然后在服务器端获取de数据,并将其写入另一个文件,但不起作用。我不熟悉c和系统调用 这是我的密码 客户端: struct stat file_stat; FILE *file; //Make connection to server void connect_to(char* localhost, int port){ int socketfd = ssocket(); printf("[+]Server socket cr

我尝试在客户端读取一个文件,在套接字上写入,然后在服务器端获取de数据,并将其写入另一个文件,但不起作用。我不熟悉c和系统调用

这是我的密码

客户端:

struct stat file_stat;
FILE *file;

//Make connection to server
void connect_to(char* localhost, int port){
    int socketfd = ssocket();
    printf("[+]Server socket created successfully.\n");
    sconnect(localhost, port, socketfd);
    printf("[+]Connected to Server.\n");


    file = fopen("tosend.txt", "r"); //open file

    //GET FILE SIZE
    //fstat(fdfile, &file_stat);
    //printf("File Size: \n%ld bytes\n", file_stat.st_size); 

    char data[BUFFER_SIZE] = {0};
    while (fgets(data, BUFFER_SIZE, file) != NULL)
    {
        for (int i = 0; i < BUFFER_SIZE; i++)
        {
            swrite(socketfd, &data, BUFFER_SIZE);
        }
    }
        printf("[+]File data sent successfully.\n");
        sclose(socketfd);
    }

您应该阅读关于这个主题的众多教程之一:将文件写入套接字与写入二进制数据没有什么不同。唯一不可忘记的是:接收器不知道要读取多少字节,所以应该首先发送文件大小(int或long),然后发送数据。接收器必须首先接收文件大小(根据您选择的int或long),然后知道从套接字读取和写入文件的字节数。
//while (1)
//{
    newsockfd = accept(sockfd,NULL,NULL);

    //INIT
    FILE *fp;
    char *filename = "tosend2.c";
    char buffer[BUFFER_SIZE];

    //write file
    fp = fopen(filename, "w");
    
    read(newsockfd, &buffer, BUFFER_SIZE);
    write(1, buffer, BUFFER_SIZE);
    fprintf(fp, "%s\n", buffer);
    bzero(buffer, BUFFER_SIZE);

close(newsockfd);
close(sockfd);
return 0;