помогите пожалуйста дописать код для получения файла на эхо сервере. моя программа получает текст, но проблема с получением файла. надеюсь на вашу помощь потому что сдавать работу надо сегодня/завтра
листинг эхо сервера #include «common_header.h» #define PREFIX «SERVER: » #define MAX_BUFFER 4095 #define PORT 22000 #include <arpa/inet.h> #include <sys/stat.h> #include <netinet/in.h> #include <stdlib.h>
int main(int argc, char **argv) { char str[MAX_BUFFER]; /*socket for exchange data (send/recv)*/ int SocketFd;
/*a descripter socket for binding to an adress */ int listener;
struct sockaddr_in servaddr;
printf(«\n sozdaem ochered zaprosov na soedinenie \n»);
listener = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); /* notice host to network conversion $
printf(«Bind socket \n»); bind(listener, (struct sockaddr *) &servaddr, sizeof(servaddr));
printf(«Start listen on the socket\n»); listen(listener, MAX);
printf(«create a new socket, Accept new connection (wait for it)\n»); SocketFd = accept(listener, (struct sockaddr*) NULL, NULL); printf(«Accepted\n»);
while(1) { char res;
bzero(str, MAX_BUFFER); res = read(SocketFd, str, MAX_BUFFER); if (!res) { printf(«Lost connection to the client\n»); printf(«Accept a new connection (wait for it)\n»); SocketFd = accept(listener, (struct sockaddr*) NULL, NULL); printf(«Accepted\n»); } else {
printf(«message: %s»,str);
if(strcmp(str)==0) { read(socketFd,str,MAXBUFFER)
}
write(SocketFd, str, strlen(str) + 1);
printf(«\n !!! socketFd: %d», SocketFd );
}
FILE*f; f=fopen("",«rb»); } }
листинг клиента
#include «common_header.h»
#include <arpa/inet.h> #include <sys/stat.h> #include <netinet/in.h> #include <stdlib.h> #define PREFIX «CLIENT: » #include <string.h> #define MAX_BUFFER 4095 #define PORT 22000
//10 int main(int argc, char **argv) {
int socketFd,n; char sendline[MAX_BUFFER]; char recvline[MAX_BUFFER];
struct sockaddr_in servaddr; //25 socketFd=socket(AF_INET,SOCK_STREAM, 0);
bzero(&servaddr,sizeof servaddr); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(PORT);
printf(«\n preobrazuem adress»); inet_pton(AF_INET, «127.0.0.1», &(servaddr.sin_addr)); printf(«\n !!!preobrazovanie adressa proshlo uspechno»);
printf(«\n podkluchaemsa k ustroistvu, adres kotorogo ukazan v serv_$ connect(socketFd, (struct sockaddr *)&servaddr, sizeof(servaddr)); printf(»\n !!! uspesho podkluchilis\n");
char filename[] = «myfile.txt»;
struct stat maxsize;
printf(«open file \n»);
FILE *fp=fopen(«myfile.txt»,«r»);
if(fp){
stat(«myfile.txt»,&maxsize); printf(" get a size of file"); printf(«size of the file: %ld »,maxsize.st_size); int filesize=maxsize.st_size; }
while(1) { char fBuf[maxsize.st_size]; bzero(sendline, MAX_BUFFER); bzero(recvline, MAX_BUFFER);
fgets(sendline,100,stdin);
printf(«\n fgets: %s\n», sendline);
printf(«\n Write to socket: %s\n», sendline);
fread(fBuf,sizeof(char),maxsize.st_size,fp); write(socketFd,fBuf,maxsize.st_size);
write(sockfd,path,strlen(path) + 1);
write(socketFd,sendline,strlen(sendline) + 1); printf(«\n Writen: %s\n», sendline);
printf(«\n PORT: %d\n», PORT); printf(«\n socketFd: %d\n», socketFd); printf(«\n Read from socket\n»); read(socketFd,recvline, MAX_BUFFER); printf(«\n !!! Received: %s», recvline); }
}