问题标签 [raknet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
raspberry-pi2 - 在 Raspberry Pi 上设置 Raknet 服务器时遇到问题
我一直在尝试让 Raknet 在我的 Raspberry Pi (2) 上启动并运行。
我正在使用一个简单的客户端服务器测试程序从我的 Windows 机器连接到我的树莓派。在 Pi 上使用 tshark 我可以看到所有消息都到达了 Pi。但是,服务器应用程序似乎没有选择这些。据我所知,所有端口都是打开的,机器在同一个网络上,代码是正确的(取自一些 github repo,带有 raknet 的示例)。
令人沮丧的是,不久前我通过以 root (sudo) 启动我的服务器应用程序解决了这种通信问题。然而,与此同时,我的设置发生了一些变化,这使得情况不再如此。任何帮助表示赞赏。
c++ - 我如何接受 C++ 中的 RakNet 连接请求?
我想接受客户的连接请求,但我不知道该怎么做。
服务器端 :
当我尝试我的工作时,它给了我。
[日志]
服务器:服务器已启动。
客户端:发送连接服务器的请求。
服务器:从客户端收到的连接服务器的请求。
服务器:接受客户的请求。(我想要做什么)
connection - Raknet:由于 ID_NAT_TARGET_NOT_CONNECTED,穿透尝试失败
我正在尝试测试来自RakNet的 NATCompleteClient 和 NATCompleteServer 示例。我能够让 NATCompleteServer 进入更新循环阶段,但我无法让 NATCompleteClient 连接到服务器:
我在不在 NAT 后面的数字海洋水滴上运行 NATCompleteServer。另外,我在 canyouseeme.org 上的 droplet 上进行了测试,它显示服务器上的端口 61111 没有被阻止。
我该如何解决这个问题?
注意:另外,我知道自 Facebook 收购 RakNet 以来,它已经死了。既然我正在尝试将 RakNet 集成到我的项目中,那么提出问题和寻求支持的最佳地点是什么?
c++ - C++ - 当我使用 sprintf() 函数时程序崩溃(std::cout 工作正常)
我正在使用 RakNet 将我的程序联网,并且我想在运行时获取一些网络统计信息。幸运的是,RakNet 有两个内置函数。GetStatistics()和StatisticsToString()。但是,当我调用StatisticsToString()
函数时程序崩溃(StatisticsToString 只是应该使用 sprintf 函数将统计数据转换为字符串),我完全不知道为什么......没有错误......什么都没有。我修改了函数的源代码并将函数替换为sprintf()
,std::cout
程序运行良好,正如预期的那样。
我用于编写统计信息的自定义函数:
StatisticsToString() 函数的源代码片段:
该std::cout
解决方案是临时的,因为我宁愿不必编辑 RakNet 的源代码。我只需要你的帮助来弄清楚为什么 sprintf 不能按预期工作。我对 C++ 相当陌生,所以也许我在这里遗漏了一些非常明显的东西。我不知道...
谢谢!
go - 本地主机 UDP 客户端未从 UDP 代理接收数据包
我有一个代理在 Minecraft(Windows 10 版)客户端和服务器之间运行,协议是 UDP。客户端广播一个未连接的 ping,然后服务器回复一个未连接的 pong,一切正常。问题是当服务器将数据包发送到我的代理时,我的代理将它发送到客户端,但由于某种原因,在那部分发生了一些事情;我的代理没有发送数据包或客户端没有接收数据包,但很可能是第二种选择。
编辑:我让未连接的 ping 和 pong 正常工作,现在服务器在服务器列表上显示在线,现在问题主要是打开的连接请求/回复。我如何让 pings 和 pongs 工作是我重新编码缓冲区并发送它们而不是发送它们原始的。
在这里你可以从wireshark看到,我的世界客户端发送一个未连接的ping代理:
现在代理收到未连接的pong,将其发送给客户端,客户端没有收到,我可以确认这一点,因为在游戏中服务器显示离线并且没有显示任何数据:
在我的代码中,我首先在端口 19132 上绑定代理并设置我要与之通信的服务器地址:
现在我的代理开始自动接收和发送数据包。
这是消息 ID 日志:
我确认客户端没有收到数据包的另一种方法是,当我在游戏中单击服务器列表中的服务器时,客户端发送一个open connection request 1 (5)
并且服务器回复为open connection reply 1 (6)
,客户端应该收到这个并继续open connection request 2 (7)
然后最后是服务器回复open connection reply 2 (8)
,但客户端从不发送open connection request 2 (7)
,因为它从未open connection reply 1 (6)
从代理获得,因此超时并断开连接,这是一个显示此的日志:
c++ - C++ 通过 Swig 到 Golang - 出现“声明无效”错误
我正在尝试编译 RakNet 游戏网络 C/C++ 库以在 Go 中使用。我目前正在使用swig -c++ -go -cgo -intgosize 64 build.swigxx && go build
将项目转换为 Go 接口,但我遇到了以下错误:
据我所知,它不喜欢RAK_DLL_EXPORT
被定义为空(#define RAK_DLL_EXPORT
),但我绝对不知道我在做什么,不知道是不是这样。
这个问题似乎特别发生在由 swig 创建的 setter 上,因为如果我删除上面正在发生的头文件,swig 会给我更多类似性质的错误。
唯一模糊地近似于我正在尝试做的事情是这个,但看起来他们正在使用一个完全不同的 RakNet 版本。许多与 swig、cgo 和将 C++ 编译成 go 相关的资源似乎已经过时了,我还没有发现任何用处。
任何比我更了解这些技术的人都可以帮我解决这个问题吗?
c++ - 尝试使用 IPv6 连接两台计算机。(RakNet 和 C++)
所以我在尝试让两台计算机使用 IPv6 地址连接时遇到了一些问题。我有一个应用程序,两个用户可以使用 IPv4 地址(相同的 wifi)相互连接和发送数据包。但是,由于冠状病毒,我们被迫在各州工作。因此,我一直在尝试切换到使用 IPv6。现在根据 RakNet文档,这应该相当简单。TLDR 是您将套接字系列设置为使用 IPv6 并更改 RakNet 头文件中的 Marco。
源.cpp
RakNetDefines.h
当我运行这个程序时,启动结果出现在 SOCKET_FAMILY_NOT_SUPPORTED 并且没有人可以连接。启动主机时会发生这种情况,这意味着我似乎没有要连接的主机。有没有其他人遇到过这个问题?我正在使用我认为默认支持 IPv6 的 Windows 10。这可能是防火墙问题吗?在我看来,这不可能,因为我是启动服务器的人,但这超出了我的专业知识。我有点撞到了一堵砖墙,所以任何帮助都会很棒。
我拥有的另一个解决方案是使用 NAT 穿透,但这需要一个外部服务器,这需要花钱(预算非常低)。我想尽可能避免使用外部服务。
提前致谢!
- 空隙
编辑:我正在用 C++ 制作这个应用程序,但使用 API RakNet 来帮助处理数据包。我相信这是我的代码中的一个 RakNet 问题,但我愿意接受建议。
编辑:我什至无法正确启动主机,因此尚未发送计算机之间的数据包。
c++ - 我自己的控制台应用程序客户端的 CPU 使用率很高
我正在构建一个充当客户端的控制台应用程序。它连接到服务器的给定 IP 地址。我在其中使用Raknet。我注意到的问题之一是程序 Consoleapplicationxx.exe 占用了很高的 CPU 使用率(如任务管理器所示)。45% 以上。
所以我通过代码检查并发现 Raknet在一个 while 循环中工作。以下是我的代码(不准确。根据我的记忆)
所以我创建了另一个控制台应用程序。下面是代码
当我运行这个程序时,它也使用高 CPU。然后我在 while 循环中添加了一个 Sleep(1000),cpu 使用率降低到 0%。我逐渐将睡眠时间减少到 1 毫秒
它运行完美(0% cpu 使用率)。(注意:我尝试将 Sleep(0) 再次设置为高 CPU 使用率 50%)那么这是解决此问题的方法吗?这样我会将 Sleep(1) 添加到我的原始程序中吗?
我计划在完成后分发该程序。所以解决问题很重要。