1

我正在尝试制作一个简单的套接字客户端(使用 debian 6 和 g++ 编译器),当我调用“connect”函数时,它返回错误代码 22 - Invalid argument。请告诉我,我做错了什么。

我已经阅读了这个函数的手册页,它说 3 个参数必须如下:int、struct sockaddr* 和 socklen_t。

我的代码是:

  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 () 函数将Internet 主机地址 cp 从 IPv4 数字和点表示法转换为网络字节顺序的二进制数据。

还:

 char                  serverHost;

它应该如何适应char

于 2012-08-03T14:11:23.483 回答