0

問題は、クライアントが使用する特定のポートを設定することですが、設定したポートではなく別のポートを使用してサーバーに接続することです。なぜこれが起こるのですか?

接続機能は次のとおりです。

int CONECT_T0_SERVER(void)
    {
    int iSetOption = 1;

    sock_descriptor = socket(AF_INET, SOCK_STREAM, 0);

    setsockopt(sock_descriptor, SOL_SOCKET, SO_REUSEADDR, (char*)&iSetOption,
            sizeof(iSetOption));

    if(sock_descriptor < 0)
      printf("Failed creating socket\n");

    memset(&sa_loc, 0, sizeof(struct sockaddr_in));
    sa_loc.sin_family = AF_INET;
    sa_loc.sin_port = htons(10002);
    sa_loc.sin_addr.s_addr = inet_addr("10.10.1.30");

    ret = bind(sock_descriptor, (struct sockaddr *)&sa_loc, sizeof(struct sockaddr));


    bzero((char *)&serv_addr, sizeof(serv_addr));

    server = gethostbyname("10.10.1.120");
   // server = gethostbyname("192.168.123.103");
    //server = gethostbyname("127.0.0.1");

    if(server == NULL)
    {
        printf("Failed finding server name\n");
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    memcpy((char *) &(serv_addr.sin_addr.s_addr), (char *)(server->h_addr), server-  >h_length);

    serv_addr.sin_port = htons(10000);
    //serv_addr.sin_port = htons(1234);

    if (connect(sock_descriptor, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("Failed to connect to server\n");
        return -1;
    }

    else
    {
        printf("Connected successfully \n");
    }
    return 0;
    }

サーバーポートは10000で、クライアントポートは10002に設定されていますが、サーバーに接続するとクライアントポートが異なります。

4

1 に答える 1

2

渡されたサイズbind()が間違っています。

sa_loc次のように宣言されていると仮定します。

struct sockaddr_in sa_loc;

それは:

ret = bind(sock_descriptor, (struct sockaddr *) &sa_loc, sizeof(struct sockaddr_in));

またはさらに良い(そしてエラーが発生しにくい):

 ret = bind(sock_descriptor, (struct sockaddr *) &sa_loc, sizeof(sa_loc));

ところで: への呼び出しで正しく行われconnect()ます。

于 2013-08-21T12:20:59.920 に答える