我正在尝试实现一个连接到给定地址的简单客户端。你注意到我把它放在我的sockaddr_in结构中之后打印了给定的地址和IP地址和端口。 我得到两个不同的地址,即使它应该是相同的。
这是我的代码:
int createConnection(char * address, char * port) {
cout << address << " " << port << endl;
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(port));
inet_aton(address,&(server.sin_addr));
memset(&(server.sin_zero), '\0', 8);
if ((sockFd = socket(PF_INET,SOCK_STREAM,0)) == -1) {
perror("client: socket");
}
if (connect(sockFd,(const sockaddr *)&server,sizeof(struct sockaddr_in)) == -1) {
close(sockFd);
perror("client: connect");
}
char s[INET_ADDRSTRLEN];
inet_ntop(AF_INET, (struct sockaddr *)&server, s, sizeof s);
printf("client: connecting to %s, %i\n", s, server.sin_port);
printf("connected");
return 0;
}
输出
132.65.151.39 3000
client: connecting to 2.0.11.184, 47115
我的问题:
我的程序后来在recv()中被阻止了,所以我认为它没有连接到我想要的地方。谢谢!
答案 0 :(得分:2)
看起来你将错误的内容传递给inet_ntop()
:
inet_ntop(AF_INET, (struct sockaddr *)&server, s, sizeof s);
你应该传递.sin_addr
:
inet_ntop(AF_INET, &server.sin_addr, s, sizeof s);
对于端口,它打印错误,因为您需要调用ntohs()
转换回主机字节顺序:
printf("client: connecting to %s, %i\n", s, ntohs(server.sin_port));
连接有效,大概是因为地址 正确设置了。