//Server Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include<unistd.h>
#define size 128
#define nofile "File Not Found"
#define E "EOF"
void sendFile(FILE*,int);
void main(int cnt,char *args[])
{
//Declaration
int Socket,Bind,Listen,Accept,Send,Recv,addrlen,sys;
char Sendf[size],Recvf[size];
struct sockaddr_in Server,Client;
FILE *fp;
//Socket
if((Socket = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("Socket Error: ");
exit(0);
}
else
{
printf("Successful Socket\n");
}
//Bind
Server.sin_family = AF_INET;
Server.sin_port = htons(atoi(args[1]));
Server.sin_addr.s_addr = inet_addr("127.0.0.1");
if((Bind = bind(Socket,(const struct sockaddr*)&Server,sizeof(struct sockaddr))) == -1)
{
perror("Bind Error: ");
exit(0);
}
else
{
printf("Successful Bind\n");
}
if((Listen = listen(Socket,5)) == -1)
{
perror("Listen Error: ");
exit(0);
}
else
{
printf("Successful Listen\n");
}
addrlen = sizeof(Client);
if((Accept = accept(Socket,(struct sockaddr*)&Client,&addrlen)) == -1)
{
perror("Accept Error: ");
exit(0);
}
else
{
printf("Successful Accept\n");
}
if((sys = system("ls > abc.txt")) == -1)
{
perror("System Error: ");
exit(0);
}
else
{
printf("Successful System Command\n");
}
fp = fopen("abc.txt","r");
sendFile(fp,Accept);
fclose(fp);
close(Socket);
}
void sendFile(FILE *fp,int Accept)
{
char temp[size];
int msg,msg_send;
memset(temp,'\0',size*sizeof(char));
if(fp == NULL)
{
strcpy(temp,nofile);
printf("%s\n",temp);
msg_send = send(Accept,temp,size,0);
return;
}
else
{
while(!feof(fp))
{
msg = fread(temp,1,size,fp);
msg_send = write(Accept,temp,size);
memset(temp,'\0',size*sizeof(char));
}
msg_send = send(Accept,E,3,0);
return;
}
}
Предыдущая программа - это серверный код, написанный для отправки указанного файла клиенту, который заполнен текущим списком имен файлов в каталоге / пути, в котором он выполняется.
//Client Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include<unistd.h>
#define size 128
#define nofile "File Not Found"
#define E "EOF"
void recvFile(FILE*,int);
void main(int cnt, char* args[])
{
//Declaration
int Socket,Send,Recv,addrlen,Connect;
char Sendf[size],Recvf[size];
struct sockaddr_in Server,Client;
FILE *fp;
//Socket
if((Socket = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("Socket Error: ");
exit(0);
}
else
{
printf("Successful Socket\n");
}
//Bind
Server.sin_family = AF_INET;
Server.sin_port = htons(atoi(args[1]));
Server.sin_addr.s_addr = inet_addr("127.0.0.1");
//Connect
if((Connect = connect(Socket,(const struct sockaddr*)&Server,sizeof(Server))) == -1)
{
perror("Connect Error: ");
exit(0);
}
else
{
printf("Successful Connect\n");
}
fp = fopen("xyz.txt","w");
recvFile(fp,Socket);
fclose(fp);
close(Socket);
}
void recvFile(FILE *fp,int Socket)
{
char buff[size];
memset(buff,'\0',size*sizeof(char));
int msg_recv,msg;
msg_recv = recv(Socket,buff,size,0);
if(!strcmp(buff,nofile))
{
printf("%s\n",buff);
}
else
{
while(strcmp(buff,E))
{
msg = fwrite(buff,1,msg_recv,fp);
buff[msg_recv] = '\0';
printf("%s",buff);
memset(buff,'\0',size*sizeof(char));
msg_recv = read(Socket,buff,size);
}
}
}
Этот код является клиентским кодом, чтобы получить файл на стороне клиента и сохранить его в файле xyz.txt. Именно здесь я сталкиваюсь с реальной проблемой, то есть получаю дополнительный символ мусора /00/00...........
в конце файла xyz.txt.
Output of the file
-------------------
abc.txt
a.out
client_file(1).c
FileClient.c
FileServer.c
fork_server.c
IO_multiplexing.c
server_file(1).c
tcpClient.c
tcpServer.c
udpClient.c
udpServer.c
xyz.txt
\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
Output of printf in the terminal
--------------------------------
[enter image description here][1]
В терминале я получаю правильный вывод, но в файле я получаю символы мусора. Пожалуйста, помогите мне исправить это?