1

Linux でサーバー クライアント チャット プログラムを作成しています。何らかの理由でコードが意図したとおりに機能していません。

問題は、while ループ内のクライアント コードにあります。doesn't wait at scanf入力を取得するためのコンパイラではなく、代わりにsends some garbage data itself to the server、サーバーもいくつかのデータと を送信しますclient program terminates

私の知識が限られているため、問題を把握できません。ご協力をお願いいたします。

サーバー.c

#define PORT 3690

#define MaxBufferLength 1024


int main()
{
    int sockFd, bytesRead, bytesSent;

    char buffer[MaxBufferLength];

    struct sockaddr_in server, client;


    server.sin_port= htons(PORT);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    sockFd = socket(AF_INET, SOCK_STREAM, 0);


    if(sockFd == -1)
        printf("Unable to open socket\n");


    int i = bind(sockFd, (struct sockaddr *) &server, sizeof(struct sockaddr));

    if(i == -1)
        perror("Unable to bind\n");



    i = listen(sockFd, 1);

    if(i == -1)
        printf("Unable to listen\n");




    int connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr));

    if(connectionSocket == 1)
        printf("connection established\n");


    while(1)
    {           
        bytesRead = recv(connectionSocket, buffer, MaxBufferLength, 0);

        buffer[bytesRead] = '\0';

        printf("Client said: \n     %s\n", buffer);


        scanf("\n\n = %s", buffer);

        bytesSent = send(connectionSocket, buffer, strlen(buffer), 0);

        if(bytesSent == -1)
            perror("Failed to send a message");

        connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr)); // wait for connection again
    }


    close(sockFd);

    return 0;



}

よろしく

4

4 に答える 4

0

クライアントとサーバーの間で実際に適切に接続していると仮定すると、client.c と server.c の両方で scanf() をどのように使用しているかに問題がある可能性があります。stdout への書き込みには printf を使用する必要があります。send() および fscanf を記述子とともに使用してメッセージを受信する代わりに、ソケット記述子を関数に直接渡す fprintf() を使用することもできます。

于 2013-09-25T17:31:44.100 に答える