【发布时间】:2012-04-09 23:58:18
【问题描述】:
我目前正在开发一个 UDP 应用程序,该应用程序允许两个用户使用 winsock 库相互交谈。目前,当我的程序运行时,它首先将 sockaddress 保存到向量中,然后当用户发送消息时,它将地址与向量中的第一个地址进行比较。当我调试和比较被比较的值时,它们完全相同,但我的 if 语句转到 else (它认为地址不相等)
这是我的代码:
#include <WinSock2.h>
sockaddr clientAddress;
recvfrom( hSocket, msg, MAXLINE, 0, &clientAddress, &cbClientAddress );
myVector.pushback(clientAddress);
if (&clientAddresses[0] == &clientAddress)
{
//is the same address
}
else
{
//not the same address
}
我还尝试在clientAddress[0] 和&clientAddress. 之后更具体地使用.sa_data
谢谢
【问题讨论】:
-
我怀疑
cbClientAddress的初始化存在问题(应该是socklen_t类型并比较错误的长度。您应该在调用@987654328 之前将此变量初始化为sizeof(clientAddress)@ 然后只比较结构中实际使用的字节数,而不是比较整个结构。你能说明你是如何初始化cbClientAddress的吗? -
@Celada 在将变量添加到向量之前,我确实将变量初始化为 sizeof(clientAddress)。我只是使用 clientAddress 作为连接的唯一标识符
-
顺便说一句,我强烈不建议这样做,除非你别无选择。您应该仅将源地址用作回复地址和用于记录/授权目的。除非别无选择,否则永远不要使用它来识别客户。
-
@DavidSchwartz - 该程序仅供个人使用,我需要登录用户,以便将消息重定向到连接到服务器的不同客户端
-
@DavidSchwartz 我 100% 同意你的观点,如果这是为了公司或非个人用途,我不想收集这些信息
标签: c++ sockets networking chat winsock2