I would like to read a file and send it to client, the client has to receive the file and send the same file back to server. I have developed the code, but i am not able to send and receive data. Can someone guide me in sorting this issue out? I am giving the code for further reference.
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int socket_desc, newSocket;
char buffer[1024];
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(6777);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
bind(socket_desc, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
puts("Bind Completed:");
if(listen(socket_desc,5)==0)
printf("Listening\n");
else
printf("Error\n");
addr_size = sizeof serverStorage;
newSocket = accept(socket_desc, (struct sockaddr *) &serverStorage, &addr_size);
puts("Connection is Accepted:");
FILE *fp;
FILE *recvfp;
int size=0,read_size=0,tot_size=0;
int i=0,stat=0,write_size=0,file_size=1;
char file_buffer[1024],received_int[10],clientSocket;
fp = fopen("/home/sosdt009/Desktop/character2.txt","r");
recvfp = fopen("/home/sosdt009/Desktop/Rrec.txt","w");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
while (size>tot_size)
{
printf("Ready for sending \n");
read_size = fread(buffer,sizeof(buffer),1,fp);
printf("Read size value is %d: \n",read_size);
stat = send(clientSocket,buffer,read_size, 0);
while (stat < 0);
tot_size=tot_size+read_size;
}
while(file_size>0)
{
printf("Receiving: \n");
file_size=recv(clientSocket,file_buffer,sizeof(file_buffer), 0);
printf("%d",file_size);
write_size = fwrite(file_buffer,1,file_size,recvfp);
printf("bytes=%d",write_size);
}
shutdown(clientSocket,1);
fclose(fp);
fclose(recvfp);
close(clientSocket);
return 0;
}
and the client code is as follows
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
void main()
{
int ClientSocket;
struct sockaddr_in serverAddr;
socklen_t addr_size;
ClientSocket = socket(AF_INET, SOCK_STREAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(6777);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
addr_size = sizeof serverAddr;
if(connect(ClientSocket, (struct sockaddr *) &serverAddr, addr_size)<0)
{
puts("Connection failed:");
exit(0);
}
else
{
puts("Connection open for data:");
}
FILE *fp;
FILE *recvfp;
int size=0,read_size=0,tot_size=0;
int i=0,stat=0,write_size=0,file_size=1;
char buffer[1024],file_buffer[1024],received_int[10];
fp = fopen("/home/sosdt009/Desktop/character.txt", "r");
recvfp = fopen("/home/sosdt009/Desktop/character.txt", "w");
while(file_size>0)
{
printf("Receiving: \n");
file_size=recv(ClientSocket,file_buffer,sizeof(file_buffer), 0);
printf("%d",file_size);
write_size = fwrite(file_buffer,1,file_size,recvfp);
printf("bytes=%d",write_size);
}
while (size>tot_size)
{
read_size = fread(file_buffer,1,sizeof(file_buffer),fp);
printf("read size value is %d: \n",read_size);
do
{
printf(" Multiple loop \n");
stat = send(ClientSocket,buffer,read_size, 0);
} while (stat < 0);
tot_size=tot_size+read_size;
}
shutdown(ClientSocket,1);
fclose(fp);
printf("read size value is %d: \n",read_size);
printf("size=%d",size);
fclose(recvfp);
close(ClientSocket);
}