C++ 连接函数错误 - 无效参数

问题描述 投票:0回答:1

我正在尝试制作一个简单的套接字客户端(使用 debian 6 和 g++ 编译器),当我调用

connect
函数时,它返回
error code 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 )
c++ sockets arguments
1个回答
2
投票
  serverAddress.sin_addr.s_addr = htons ( serverHost );

IPv4 地址是长地址,而不是短地址,所以

htons
就可以了。无论如何,数据已经是网络字节顺序了,所以不需要转换。

inet_addr() 函数将 Internet 主机地址 cp 从 IPv4 数字和点表示法转换为网络字节顺序的二进制数据。

还有:

 char                  serverHost;

它应该如何适合

char

© www.soinside.com 2019 - 2024. All rights reserved.