TCP recvfrom() 不存储 'from'
TCP recvfrom() doesn't store 'from'
我正在使用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是一种面向连接的协议。 from
和fromlen
旨在与无连接协议(如 UDP)一起使用。根据文档,recvfrom
忽略面向连接的套接字的from
和fromlen
。
对于连接的TCP套接字,应使用getpeername()获取远程套接字的地址。
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- TCP recvfrom() 不存储 'from'