TCP recvfrom() 不存储 'from'

TCP recvfrom() doesn't store 'from'

本文关键字:from 存储 recvfrom TCP      更新时间:2023-10-16

我正在使用TCP制作服务器程序,我想获取我刚刚收到的消息发送者的IP地址。这是我的代码:

case FD_READ:
{    //Incoming data; get ready to receive
    char buffer[DEFAULT_BUFLEN];
    int bytes_received; 
    memset(buffer, '', sizeof(buffer));
    struct sockaddr_in recvIn;
    int recv_length = sizeof(struct sockaddr);
    memset((void *)&recvIn, '', recv_length);
    bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
    cout << inet_ntoa(recvIn.sin_addr) << "n";
    break;
}

所以我正在使用 Windows 消息来查看是否应该检查数据包。接收数据有效,我可以读取它和所有内容。但是 recvIn 变量不会被 recvfrom 改变。因此,当我将 cout <<inet_ntoa(recvIn.sin_addr) <<""时,它写着"0.0.0.0"。我已经用谷歌搜索过这个问题,大多数遇到这个问题的人都忘记初始化recv_length。但我很确定我在这里做对了。谁能看出我做错了什么?还是我需要更改正在发送的数据的某些内容?传入数据是否可能没有 IP 地址。这是我非常怀疑的事情,因为我使用的是TCP。

谢谢你的时间,我希望我能解决这个问题!

TCP是一种面向连接的协议。 fromfromlen旨在与无连接协议(如 UDP)一起使用。根据文档,recvfrom忽略面向连接的套接字的fromfromlen

对于连接的TCP套接字,应使用getpeername()获取远程套接字的地址。