我尝试在C中的服务器应用程序中打印客户端端口。
但我得到客户端端口的负数,有什么奇怪的行为: - /
任何人都知道哪里可能有问题?
导致问题的部分代码:
struct sockaddr_in client_address;
int chosenPort = (int) ntohl(client_address.sin_port);
pritf("Client port is %d, chosenPort");
我的端口像-2121400320。
答案 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命令找到更多详细信息..