خرید بک لینک

Vote count: 0

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?

asked 52 secs ago

برچسب: how to send a file through socket in c,how to send files through socket coection in java,how to send a file over a socket in c,how to send file in c socket,how to transfer a file using sockets in c,how to send file using socket in c, نویسنده: استخدام کار تاريخ: شنبه 6 شهريور 1395 ساعت: 11:51

صفحه بندی