1

UDPクライアント/サーバーを作成しようとしています.サーバーはクライアントからメッセージを受信しますが、サーバーメッセージはクライアント側に到達しません..ガイドしてください

サーバー:

int main()
{
    char message[100];
    int sockfd, newsockfd;
    struct sockaddr_in my_addr, client_addr;
    sockfd=socket(AF_INET, SOCK_DGRAM, 0);

    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(1025);
    my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

    memset(&(my_addr.sin_zero),'\0',8);
    bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr));
    perror("bind"); 

    while(1)
    {   
        for(int i=0;i<100;i++)
            message[i]=0;

        do{
            cout<<"Waiting..!!"<<endl;
            recvfrom(sockfd,message,sizeof(message),0,(struct sockaddr *)&client_addr,(socklen_t *)&client_addr); // receiving messages to client
            cout<<"CLIENT : "<<message<<endl;
            cin.getline(message,100);
            sendto(sockfd,message,sizeof(message),0,(struct sockaddr *)&client_addr,sizeof(client_addr)); // sending messages to client
        }while(strcmp(message,"quit")!=0);

    }
close(sockfd);

return 0;
}

これは正しく実行されるクライアント部分ですが、サーバーからメッセージを受信せず、すべてがうまく機能しています

クライアント :

int main()
{
    int sockfd;
    struct sockaddr_in my_addr;
    sockfd=socket(AF_INET, SOCK_DGRAM, 0);
    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(1025);
    my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

    char buffer[100];
    do{
        cout<<"CLIENT : ";
        cin.getline(buffer,100);
        sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *) &my_addr,sizeof(my_addr)); // sending messages to server
        recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *)&my_addr,(socklen_t *)&my_addr); // receiving messages to server
        cout<<"SERVER : "<<buffer<<endl;
    }while(strcmp(buffer,"quit")!=0);
    close(sockfd);
    perror("connection");
return 0;
}
4

1 に答える 1

2

あなたはオブジェクトを台無しにしていclient_addrます:

recvfrom(....,(struct sockaddr *)&client_addr,(socklen_t *)&client_addr);
                                                            ^^^^^

次のようなものを試してください:

socklen_t len = sizeof(client_addr);
recvfrom(..., (struct sockaddr *)&client_addr, &len);
于 2013-10-03T12:50:03.827 に答える