2

次のコードを使用して、コマンドライン引数として提供される特定のポートでサーバーに接続しています...

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <strings.h>

int main(int argc,char *argv[])
{
   struct sockaddr_in serverAddr;
   int clientSocketFd ;
   char buffer[1024];

 if((clientSocketFd = socket(AF_INET, SOCK_STREAM, 0))==-1)
    perror("socket");

//get the server IP address and PORT
bzero(&serverAddr, sizeof serverAddr);
printf("ip address :- %s\n",argv[1]);
inet_pton(AF_INET, argv[1], &(serverAddr.sin_addr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_port = atoi(argv[2]);

printf("PORT :- %d\n",serverAddr.sin_port);
//connect to server
if(connect(clientSocketFd,(struct sockaddr *) &serverAddr, sizeof(serverAddr)) == -1)
    perror("connect");

printf("Connecting to the server %s on port %s \n",argv[1],argv[2]);

while (1)
{
    //receive incoming data
    if(recv(clientSocketFd, buffer,1023, 0)==-1)
    {
    printf("buffer : %s\n" ,buffer);
    printf("Received from Server : %s \n",buffer);
        break;
    }


}
close(clientSocketFd);

}

しかし、クライアント側では、「接続:接続が拒否されました」と表示されます...

telnet を使用すると、 connected と表示されますが、上記の client.c コードでは接続できません plz help

また、保留中の最大許容接続数を 100 に変更しましたが、問題は解決しませんでした... :( ...help plz

4

1 に答える 1

10

間違ったポートに接続しています。変化する:

serverAddr.sin_port = atoi(argv[2]);

に:

serverAddr.sin_port = htons(atoi(argv[2]));

これらの構造は、数字の書き方が異なる別の惑星と通信するために使用されると考えてください。数字の書き方から数字の書き方に変換する必要があります。そうしないと、ナンセンスになります。

このhtons機能は、ポート番号をコンピューターが保存する方法からネットワークで使用される方法に変換します。このntohs機能は、ポート番号をネットワーク上での使用方法からコンピューターでの保存方法に変換します。ソケット アドレスはネットワーク バイト順です。

于 2013-01-08T12:12:07.150 に答える