0

サーバーは、LinuxのCプログラムを使用してクライアントから送信されたメッセージをエコーする必要があります。UbuntuOSを使用しています(この情報が役立つかどうかはわかりません!)。初めて動作しました。しかし、2回目は、「エラー接続」が発生しました。ポート番号を変えてみました。しかし、それでも機能しませんでした。親切に案内してください。私は初心者です。

server.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>

int main()
{
    int sd, sd1, len, confd, n;
    struct sockaddr_in ser, cli;
    char msg[50];

    if((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0)
        printf("\nSocket creation error\n");

    bzero(&ser, sizeof(ser));
    ser.sin_family = cli.sin_family = PF_INET;
    ser.sin_port = htons(10000);
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    len = sizeof(ser);

    if ((bind(sd, (struct sockaddr*)&ser, len)) < 0) {
        printf("\nBind Error");
        exit(0);
    }
    if (listen(sd, 2) == 0) {
        if ((sd1 = accept(sd, (struct sockaddr*)&ser, &len)) > 0) {
            do {
                bzero(&msg, 50);
                read(sd1, msg, 50);
                //int m=(int)msg;
                printf("\nMessage from client:%s\n", msg);
                write(sd1, msg, strlen(msg));
                if(strcmp(msg, "exit") == 0)
                    break;
            } while(strcmp(msg, "exit") != 0);
        }
    }
}

*強力なテキスト*client.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>

int main()
{
    int sd, n, len;
    struct sockaddr_in ser, cli;
    char text[50];

    if ((sd = socket(AF_INET,SOCK_STREAM, 0)) < 0)
        printf("\nSocket creation error\n");

    bzero(&ser, sizeof(ser));
    ser.sin_family = cli.sin_family = PF_INET;
    ser.sin_port = htons(10000);
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    len = sizeof(ser);

    if ((connect(sd, (struct sockaddr*)&ser, len)) < 0) {
        printf("\nError connection");
        exit(0);
    }
    while(1) {
        strcpy(text, " ");
        printf("\nEnter data which is to be sent:");
        scanf("%s", text);
        write(sd, text, strlen(text));
        read(sd, text, 50);
        printf("\nEcho msg from server:%s", text);
        if (strcmp(text, "exit") == 0)
            break;
    }
    close(sd);
}
4

1 に答える 1

1

クライアントは実際に任意のアドレスに接続できますか?

ser.sin_addr.s_addr=htonl(INADDR_ANY);

ほとんどの場合、特定のサーバーに接続するつもりでした。

ser.sin_addr.s_addr=inet_addr("127.0.0.1");
于 2012-10-24T17:51:23.983 に答える