ntohl用于sin_port并得到负数

时间:2012-03-09 08:19:04

标签: c port printf

我尝试在C中的服务器应用程序中打印客户端端口。 但我得到客户端端口的负数,有什么奇怪的行为: - / 任何人都知道哪里可能有问题?
导致问题的部分代码:

struct sockaddr_in client_address;
int chosenPort = (int) ntohl(client_address.sin_port);
pritf("Client port is %d, chosenPort");

我的端口像-2121400320。

2 个答案:

答案 0 :(得分:7)

使用ntohs()代替 - sin_port是16位值。

答案 1 :(得分:0)

首先,你必须使用ntohs函数而不是ntohl。 ntohs()返回16位端口号,ntohl返回32位IP地址

现在,您可以使用getpeername()

获取客户详细信息

语法:

#include <sys/socket.h>
struct sockaddr_in client_address;
int getpeername(int sockfd, struct sockaddr *client, socklen_t *addrlen);

您可以使用man命令找到更多详细信息..