我写一个服务器 - 客户端程序,并在服务器中我使用getaddrinfo和getsockname在服务器上,以获取有关本地IP地址和本地绑定端口号的信息返回。 使用此信息,我启动我的客户端程序并使用getaddrinfo,然后仅打印出servinfo数据结构中的返回值: getaddrinfo(argc [1],argc [2],&提示,& servinfo); >>服务器主机名和服务器端口号通过命令行传递。sin_port中的getaddrinfo错误
但我注意到,在servinfo的sin_port是不是我通过命令行传递的端口。 1)这个getaddrinfo是否返回客户端使用的端口号作为源端口号? 2)getaddrinfo和套接字调用失败后,我的连接调用。我不知道为什么。我如何调试它?
我的客户代码片段:
memset(&hints, 0 ,sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME | AI_NUMERICSERV;
getaddrinfo(argc[1], argc[2], &hints, &servinfo);
for (p = servinfo till p!=NULL)
sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)
connect(sockfd, p->ai_addr, p->ai_addrlen) >>>>> Connect not going through.
我开始了我的客户端程序是这样的: ./a.out myservername 18844个
谢谢!
你怎么知道的getaddrinfo()没有失败,错误?你没有检查它的返回值是否为零。如果gettaddrinfo()失败,那么它当然不会写入数据到它的输出参数。 –
我正在用servername调用它。但错过了将它添加到问题描述中。 – Vin
我将检查getaddrinfo的返回码。它不应该失败,因为我能够读取以servinfo结构返回的IPv4地址。 – Vin