1

(debian6とg++コンパイラを使用して)単純なソケットクライアントを作成しようとしていますが、「connect」関数を呼び出すと、エラーコード22-無効な引数が返されます。教えてください、私が間違っていることをお願いします。

この関数のマニュアルページを読みましたが、int、struct sockaddr *、socklen_tの3つの引数に従う必要があると書かれています。

私のコードは次のとおりです。

  int                   serverPort;
  u_long                serverHost;
  struct sockaddr_in    serverAddress;
  socklen_t             serverAddressLength;
  int                   clientSocket;

  serverPort = 44444;
  serverHost = inet_addr ( "88.198.237.65" );
  serverAddress.sin_family = AF_INET;
  serverAddress.sin_port =  htons ( serverPort );
  serverAddress.sin_addr.s_addr = htons ( serverHost );
  serverAddressLength = sizeof ( serverAddress );

  clientSocket = socket ( AF_INET , SOCK_STREAM , 0 );

  connect ( clientSocket , (sockaddr*)&serverAddress , serverAddressLength )
4

1 に答える 1

2
  serverAddress.sin_addr.s_addr = htons ( serverHost );

IPv4アドレスは短いのではなく長いので、htonsすぐにわかります。とにかくデータはすでにネットワークバイトオーダーであるため、変換は必要ありません。

inet_addr ()関数、インターネットホストアドレスcpをIPv4の数値とドットの表記からネットワークバイトオーダーのバイナリデータに変換します。

また:

 char                  serverHost;

どのように収まるはずcharですか?

于 2012-08-03T14:11:23.483 に答える