无法在 Linux 的套接字编程中将 in_addr 转换为 Unsigned Int
Cannot Convert in_addr to Unsigned Int in Socket Programming for Linux
我正在使用 C++ 在 TCP 中构建一个反向回显服务器。
我的问题发生在我 运行 我的客户时。
当我编译我的 client.cpp 时,我得到这个错误:
error: cannot convert ‘in_addr’ to ‘in_addr_t {aka unsigned int}’ in assignment
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
这是我创建连接的代码:
serverName = argv[1];
struct sockaddr_in serverAddress;
struct hostent* host;
host = gethostbyname(serverName);
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
serverAddress.sin_port = htons(serverPort);
memmove(&serverAddress.sin_addr.s_addr, host->h_addr_list[0], host->h_length);
connectValue = connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
我是不是漏掉了什么?
您正在尝试将整个 in_addr
结构实例分配给单个整数。那是行不通的。
sockaddr_in::sin_addr
成员是一个in_addr
结构,in_addr::s_addr
成员是实际的IP地址。只需删除 s_addr
部分即可分配整个 in_addr
结构 as-is:
serverAddress.sin_addr = *((struct in_addr*)host->h_addr);
否则,您可以 memcpy()
(或者,在您的示例中,memmove()
)将 in_addr
结构作为一个整体放入 sin_addr
成员中。您正在尝试 copy/move 到它的 s_addr
成员,所以只需删除它:
memcpy(&serverAddress.sin_addr, host->h_addr, host->h_length);
我正在使用 C++ 在 TCP 中构建一个反向回显服务器。
我的问题发生在我 运行 我的客户时。
当我编译我的 client.cpp 时,我得到这个错误:
error: cannot convert ‘in_addr’ to ‘in_addr_t {aka unsigned int}’ in assignment
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
这是我创建连接的代码:
serverName = argv[1];
struct sockaddr_in serverAddress;
struct hostent* host;
host = gethostbyname(serverName);
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = *((struct in_addr*)host->h_addr);
serverAddress.sin_port = htons(serverPort);
memmove(&serverAddress.sin_addr.s_addr, host->h_addr_list[0], host->h_length);
connectValue = connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
我是不是漏掉了什么?
您正在尝试将整个 in_addr
结构实例分配给单个整数。那是行不通的。
sockaddr_in::sin_addr
成员是一个in_addr
结构,in_addr::s_addr
成员是实际的IP地址。只需删除 s_addr
部分即可分配整个 in_addr
结构 as-is:
serverAddress.sin_addr = *((struct in_addr*)host->h_addr);
否则,您可以 memcpy()
(或者,在您的示例中,memmove()
)将 in_addr
结构作为一个整体放入 sin_addr
成员中。您正在尝试 copy/move 到它的 s_addr
成员,所以只需删除它:
memcpy(&serverAddress.sin_addr, host->h_addr, host->h_length);