我正在使用 TCP 制作一个服务器程序,我想获取我刚刚收到的消息的发件人的 IP 地址。这是我的代码:
case FD_READ:
{ //Incoming data; get ready to receive
char buffer[DEFAULT_BUFLEN];
int bytes_received;
memset(buffer, '\0', sizeof(buffer));
struct sockaddr_in recvIn;
int recv_length = sizeof(struct sockaddr);
memset((void *)&recvIn, '\0', recv_length);
bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
cout << inet_ntoa(recvIn.sin_addr) << "\n";
break;
}
所以我正在使用 Windows 消息来查看是否应该检查数据包。接收数据有效,我可以阅读它和一切。但 recvfrom 不会改变 recvIn 变量。因此,当我执行 cout << inet_ntoa(recvIn.sin_addr) << "\n" 时,它会写入 "0.0.0.0"。我用谷歌搜索了这个问题,大多数遇到这个问题的人都忘记了初始化recv_length。但我很确定我在这里做得对。谁能看到我做错了什么?还是我需要对正在发送的数据进行一些更改?传入的数据是否可能没有 IP 地址。这是我高度怀疑的,因为我使用的是 TCP。
谢谢你的时间,我希望我能解决这个问题!