Я не понимаю, откуда дело, и оно толкает меня к стене. Я пытаюсь сделать клиент / сервер, где я отправляю файл через сокет на сервер. Раньше он был в состоянии сохранить файл, но теперь он просто говорит регистр вместо содержимого файла. Кроме того, всякий раз, когда я отправляю этот текст на сервер, сервер даже не помещает регистр в файл, он просто создает файл 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;
} ```