我目前正在研究一个UDP应用程序,允许两个用户使用winsock librarary与海誓山盟对话。目前,当我的程序运行时,它首先将sockaddress保存到一个向量中,然后当用户发送消息时,它会将该地址与向量中的第一个地址进行比较。当我调试和比较值进行比较,他们是完全一样的但我如果statment转到其他(它认为该地址不等于对方)问题与比较套接字地址
这是我的代码有:
#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
}
香港专业教育学院还试图更加具体使用.sa_data
的clientAddress[0]
和&clientAddress.
感谢后
我怀疑周围cbClientAddress'的'初始化(这应该是类型'socklen_t'和比较错误的长度问题,您应该调用之前initializating这个变量为'的sizeof(clientAddress)''来recvfrom',然后比较结构中实际使用的字节数,而不是比较整个结构。你能告诉我如何初始化'cbClientAddress'? – Celada 2012-04-10 00:05:10
@Celada我在添加变量之前初始化变量sizeof(clientAddress)我只是使用clientAddress作为连接的唯一标识符 – user1219627 2012-04-10 00:11:02
顺便说一句,我强烈建议不要这样做,除非你别无选择。你应该只使用源地址作为回复的地址,用于记录/授权目的除非你别无选择,否则决不能用它来识别客户。 – 2012-04-10 00:12:35