首页 > 解决方案 > 用C读入文件,将内容放入缓冲区,而不是在缓冲区中获取大小写

问题描述

我不明白案子是从哪里来的,它把我逼到了墙角。我试图做一个客户端/服务器,我通过一个套接字将文件发送到服务器。它曾经能够存储文件,但现在它只显示大小写而不是文件内容。此外,每当我将此文本发送到服务器时,服务器甚至不会将大小写放入文件中,它只是在文件夹中创建 file.txt,然后在根目录创建一个文件名损坏的垃圾文件。

#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
//#include<sys/types.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<ctype.h>

int main(int argc, char *argv[])
{
    int SID;
    int gid,uid,ueid,geid;
    gid_t *groups;
    struct sockaddr_in server;
    //Create socket
    SID =  socket(AF_INET, SOCK_STREAM, 0);
    if(SID == -1)
    {
        printf("Error creating socket");
    }else{
        printf("Socket created");
    }
    //set sockaddr_in variables
    server.sin_port =htons ( 8081 );//port to connect on
    server.sin_addr.s_addr=inet_addr("127.0.0.1");//server ip
    server.sin_family = AF_INET;//ipv4 protocol

    //connect to server
    if(connect(SID, (struct sockaddr *)&server, sizeof(server))<0)
    {
        printf("connect failed. Error");
        return 1;
    }
    //uid = 1000;//getuid();
    //gid = 1000;//getgid();
    //ueid = geteuid();
    //geid = getegid();

    //printf("%d\n", uid);
    //gid=getgid();
    //printf("%d\n", gid);
    printf("connected to server ok\n");
    char root[] ="Root/"; //remove name root as it will need to be in the root directory
    char sales[] = "Sales/";
    char promotions[] ="Promotions/";
    char offers[] = "Offers/";
    char marketing[] ="Marketing/";
    ///sending file craic
    FILE *f;
    int words =0;
    char c;
    int serverpath;
    char enteredfilename[200];
    char file_name[300];
    printf("Whats the file name?\n");
    scanf("%s", enteredfilename);



    do{
        printf("\n Enter the number of the file destinations\n1. Root\n2. Sales\n3. Promotions\n4. Offers\n5. Marketing\n6. Exit\n");

        scanf("%d", &serverpath);
        switch (serverpath)
        {
            case 1://root
                strcat(root, enteredfilename);
                strcpy(file_name,root);
                break;
            case 2://sales
                strcat(sales, enteredfilename);
                strcpy(file_name,sales);
                break; 
            case 3://promotions
                strcat(promotions, enteredfilename);
                strcpy(file_name,promotions); 
                break;   
            case 4://offers
                strcat(offers, enteredfilename);
                strcpy(file_name,offers);
                break;
            case 5://marketing
                strcat(marketing, enteredfilename);
                strcpy(file_name,marketing);
                break;
            case 6://exit
                printf("Client terminated");
                exit(1);
            default:
                printf("Please enter a number between 1-6");
                break;
        }
    }while((serverpath != 1) && (serverpath != 2) && (serverpath != 3) && (serverpath != 4) && (serverpath != 5) && (serverpath != 6));

    f = fopen(enteredfilename, "r");//r just means we are reading it
    if(f == NULL)//if there is no file, it will close
    {
        printf("error opening file\n");
        exit(1);
    };

    char buffer[1024];
    while((c = getc(f))!= EOF)
    {
        fscanf(f, "%s", buffer);
        if(isspace(c) || c=='\t')
        words++;
    }
    //write(SID, uid, 255);
    //write(SID, gid, 255);
    //write(SID, ueid, 255);
    //write(SID, geid, 255); 
    write(SID, file_name, 255);//sends the file_name to the server

    rewind(f);

    char ch;
    printf("%s", buffer);
    while (ch != EOF)
    {
        fscanf(f, "%s", buffer);
        if(isspace(c) || c=='\t'){
            strncat(buffer, " ",1);//probably doesnt work
        }
        ch = fgetc(f);

    }

    printf("%s", buffer);
    write(SID, buffer,255);//sends buffer to server
    write(SID, &words, sizeof(int));


    printf("The file has been successfully sent");

    close(SID);
    return 0;
}  ``` 

标签: cserverclient

解决方案


推荐阅读