首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的眩晕绑定请求哪里出错了?

我的眩晕绑定请求哪里出错了?
EN

Stack Overflow用户
提问于 2016-12-02 10:56:52
回答 1查看 1K关注 0票数 0

我向stun.l.google.com:19305发送udp请求,但没有从google服务器获得任何响应。我省略了这段代码中的所有错误检查。我的程序挂在recvfrom上。

代码语言:javascript
复制
int stun_socket = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in stun_client;
memset(&stun_client, 0, sizeof(stun_client));

stun_client.sin_family = AF_INET;
stun_client.sin_port = htons(local_port);

int rc = bind(stun_socket, (struct sockaddr *)&stun_client, sizeof(stun_client));

struct sockaddr_in stun_server;
memset(&stun_server, 0, sizeof(stun_server));

stun_server.sin_family = AF_INET;
stun_server.sin_port = htons(remote_port);
inet_pton(AF_INET, server, &stun_server.sin_addr);

typedef struct stun_header_tag {
    uint16_t message_type;
    uint16_t message_length;
    unsigned char transaction_id[16];
} stun_header_t;

stun_header_t header;
header.message_type = htons(0x0001); /* Binding Request */
header.message_length = htons(0);
*(int *)(&header.transaction_id[8]) = 0xFFEEFFEE; /* transaction id in the response should keep consistent with this one */

rc = sendto(stun_socket, (void *)&header, sizeof(header), 0, (struct sockaddr *)&stun_server, sizeof(stun_server));

char response[64];
rc = recvfrom(stun_socket, response, 64, 0, NULL, 0);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 18:04:47

我猜您正在为发送数据做类似的或等效的事情:

代码语言:javascript
复制
sendto(sock, &header, sizeof(header), (sockaddr*)&addr, addrlen);

如果是这样的话,您可能忘记将您的message_type值转换为网络字节顺序(大端)。

试试这个:

代码语言:javascript
复制
header.message_type = htons(0x0001);

但是,如果您想要一个更好的解决方案,并且可以使用C++,请使用内置到特技演员中的客户端库。您可以使用C++类CStunMessageBuilder生成绑定请求,该类在特技核心/特技建筑文件中声明。

代码语言:javascript
复制
CStunMessageBuilder builder;
StunTransactionId transId;

builder.AddBindingRequestHeader();
builder.AddRandomTransactionId(&transID);
unsigned char* msg = builder.GetStream().GetDataPointerUnsafe();
size_t len = builder.GetStream().GetSize();

sendto(sock, msg, len, (sockaddr*)&addr, addrlen);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40930566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档