Прочитать файл в C, поместить содержимое в буфер, вместо этого получить регистр в буфере - PullRequest
0 голосов
/ 03 мая 2020

Я не понимаю, откуда дело, и оно толкает меня к стене. Я пытаюсь сделать клиент / сервер, где я отправляю файл через сокет на сервер. Раньше он был в состоянии сохранить файл, но теперь он просто говорит регистр вместо содержимого файла. Кроме того, всякий раз, когда я отправляю этот текст на сервер, сервер даже не помещает регистр в файл, он просто создает файл file.txt в папке, а затем на root создает файл мусора, который имеет поврежденное имя файла.

#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;
}  ``` 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...