i got some project that the idea is the sender send the file.txt to the receiver on linux c++. i have implemented the function explain below. the problem is if the sender send a file with 1638 number of lines the receiver can't properly write the file.
sender.cpp
int Socket,n;
int t;
struct sockaddr_in serv,client;
char *buffer;
int size, size1= 0;
char cisi[10];
void socketting(){
Socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
serv.sin_family = AF_INET;
serv.sin_port = htons(41);
serv.sin_addr.s_addr = inet_addr("127.0.0.1");
socklen_t l = sizeof(client);
socklen_t m = sizeof(serv);
}
int main (){
socketting();
while(1){
ifstream is ;
cek:
is.open("iptabless.txt", ios::in|ios::binary|ios::ate);
if(is.is_open()){
is.seekg(0,is.end);
size = is.tellg();
is.seekg(0,is.beg);
t=t+1;
sprintf(cisi, "%i",size);
}else{
cout<<"file not exist!!.. n";
goto cek;
}
int send = sendto(Socket,cisi,10,0,(struct sockaddr *)&serv,sizeof(serv));
buffer = (char*) malloc (size+1);
is.read(buffer,size);
is.close();
int send1 = sendto(Socket,buffer,size,0,(struct sockaddr *)&serv,sizeof(client));
cout<<"file sent... n";
delete[] buffer;
usleep(1000000);
}
return 0;
}
receiver.cpp
#define BUFLEN 1000000
int Socket;
long int recv_size, recv_file;
int size = 1000000;
bool ulang = false;
struct sockaddr_in serverAddr;
struct sockaddr_in remaddr, client;
char buffer[BUFLEN];
char *filesize = new char[10];
socklen_t addrlen;
int main() {
Socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(Socket<0){
cout<<"Errr"<<endl;
}else
{
cout<<"succes"<<endl;
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(41);
serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
if(bind(Socket,(struct sockaddr*)&serverAddr,sizeof(serverAddr))<0)
{
cout<<"bind failed"<<endl;
return 0;
}
else
{
addrlen=sizeof(remaddr);
socklen_t l = sizeof(client);
cout<<"Waiting on port 41"<<endl;
recv_size=recvfrom(Socket, filesize, 10, 0,(struct sockaddr *)&remaddr,(socklen_t *)&addrlen);
recv_file=recvfrom(Socket, buffer, size, 0,(struct sockaddr *)&remaddr,(socklen_t *)&addrlen);
while(filesize){
//cout << "received packet n" , inet_ntoa(remaddr.sin_addr);
size = atoi((const char*)filesize);
ofstream myfile("iptables_recv.txt");
if(myfile.is_open()){
myfile.write(buffer,size);
myfile.close();
}else{
cout << "error buat file iptables_recv .n";
}
recv_size=recvfrom(Socket, filesize, 10, 0,(struct sockaddr *)&remaddr,(socklen_t *)&addrlen);
recv_file=recvfrom(Socket, buffer, size, 0,(struct sockaddr *)&remaddr,(socklen_t *)&addrlen);
cout<<"the message received is : "<<filesize<<endl;
cout<<"the buffer received is : "<<buffer<<endl;
}
}
return 0;
}
then the result from that problem on receiver file.txt
65532NULLNULLNULL
Someone could kindly tell me where I'm wrong?
