问题标签 [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.

0 投票
1 回答
385 浏览

ios - Unity3D + iOS (il2cpp) 上的 Raknet 连接问题

我在 iOS 上使用 Unity3D 运行最新版本的 Raknet 时遇到奇怪的问题:我CONNECTION_ATTEMPT_FAILED在尝试连接到服务器时遇到问题。

现在让我详细说明这个问题:

在 ObjectiveC 应用程序中使用时,完全相同的库连接良好,因此问题似乎与 Unity3D 相关。

我已经设法确定我的问题位于 Raknet 可靠性层:

显然,在连接过程的最后一步(当连接握手完成时),服务器的可靠性层认为 ID_CONNECTION_REQUEST从客户端收到的数据包是确认而不是消息。因此它不回答。最终经过几次尝试(和 10 秒超时),客户端因CONNECTION_ATTEMPT_FAILED错误而失败。

有人有想法吗?当我设法获得更多信息时,我会更新问题。

更新

我们正在使用 Unity3D 5.1.1f1

我们设法找到了解决方法!有关更多信息,请参阅答案。由于解决方法并没有告诉我们太多关于真正发生的事情,我很乐意听到一些 C++/XCode/Unity/iOS/AppleLLVM6.1 专家在这里解释真正发生的事情。

0 投票
2 回答
2902 浏览

c++ - 使用 RakNet 发送数据包的最佳方式

我想知道如何使用 RakNet 在客户端-服务器架构中向客户端发送数据包。在这个示例代码中,我们有这一行:

但是,原型如下(来自接口类):

如您所见,第 5 个参数采用 AddressOrGUID,这意味着我们可以发送示例中的 SystemAddress,但也可以发送连接机器的唯一 GUID。

有一个函数叫做:

但我不确定 RakNet 是否使用它来转换我们可以作为参数发送的 GUID(我在 RakPeer(RakPeerInterface 的实现)中没有发现此方法的任何用途,而且我无法找到缓冲数据包的方式发送每个刻度)。

问题如下:

示例代码直接回复收到的数据包。然而,在游戏中,服务器必须发送信息而不接收来自客户端的数据包。所以我无法访问类似的东西

因为没有收到数据包。

所以我必须在我的 Player 类中存储一些东西才能知道如何向他们发送数据包:SystemAddress 或 RakNetGUID。与 SystemAddress 相比,RakNetGUID 的存储更简单、更轻。

但是,如果 RakNet 使用 GetSystemAddressFromGUID(),则不值得,因为它具有 O(log(n)) 算法。

我是否需要自己为每个 Player 存储 SystemAddress 或 RakNet::Send() 不将此方法与 RakNetGUID 一起使用?

谢谢!

0 投票
1 回答
872 浏览

c++ - 无法使用 RakNet... 链接错误

(注意:我使用的是 Visual Studio 2013)

我正在尝试在我的项目中使用 RakNet,但遇到了很多问题。

如果我尝试在没有 lib 文件的情况下进行编译:

如果我尝试使用我在 VS2013 中编译的 RakNet 静态库文件进行编译:

我只有在#include "RakPeerInterface.h".

如果我能在某处找到预编译的库,也许会有所帮助?

0 投票
0 回答
140 浏览

c++ - RakNet 63 会话限制

我在 windows server 2008 上使用 raknet 进行 tcp 网络,它可以接受很多连接,但不能从所有连接中接收数据包:只能读取 63 个客户端的数据包。

这是我的接收代码:

0 投票
1 回答
470 浏览

c++ - 如何让 RakNet 更可靠?

这是摘要,我将数据包从服务器发送到在同一台计算机上运行的客户端。由于某种原因,发送的数据包与接收的数据包不同。

这是详细信息:

数据包是使用带有调用函数的RakNet发送的:

以下是服务器发送的数据包的前 10 个字节:27,50,39,133,202,135,0,0,0,99 ... 1180 个字节

这是接收客户端看到的数据包的前 10 个字节(注意:50% 的时间是正确的,另一半是这样):27,50,43,40,247,134,255,255,255,99 ... 1180 多字节

第一个字节是ID_TIMESTAMP. 字节 2-5 包含时间戳,我认为RakNet 会以某种方式混淆。第 6 个字节是明显改变的打包 ID,以及后面的 3 个字节。

我怀疑该错误是由数据包的长度引起的,因为较小的数据包似乎发送时没有任何可检测到的错误,但是我了解RakNet 会自动处理数据包损坏并在数据包太大时在内部拆分数据包。

任何帮助表示赞赏。

0 投票
1 回答
51 浏览

c++ - 为什么 RakNet 的 SetNetworkID 会导致断言失败?

所以我有一个基于 RakNet 的 NetworkIDObjects 创建对象的工厂。如果是权限,那么它只会创建一个新对象,否则它将创建对象然后设置网络 ID:

这对于在客户端生成的前几个 NetObjects 工作正常,但第三个总是在 SetNetworkID 中崩溃:

使用以下调用堆栈:

我在其他任何地方都找不到有关此错误的任何信息,也无法弄清楚这个特定对象有什么不同。NetworkID 似乎与之前的对象没有什么不同(除了它增加了一个)。据我所知,没有什么明显的原因可以导致这次崩溃。

0 投票
1 回答
92 浏览

terrain - 使用 RakNet 发送地形高度数据

我生成一个像这样的字符串:

高度数据量为 MapSize^2(MapSize 通常为 256x256)。但问题是 - 这是通过 RakNet (UDP) 发送的合理数据量吗?我可以将数据分成块,但我想避免这样做。

0 投票
0 回答
301 浏览

java - 如何为现有的 Raknet 应用程序制作代理

我目前正在尝试为使用 Raknet 协议的应用程序制作代理。我希望能够接收客户端连接,记录/操作它并将其发送到服务器,但是我在复制协议时遇到了困难。我最好尝试在 Java 中执行此操作,但如果需要,我不介意切换语言。

我尝试使用标准 Java 套接字和 Netty 套接字,但是当我尝试立即转发连接时,它被拒绝了。

任何人都可以通过指出我复制协议的正确方向来帮助我吗?

如果需要,我可以提供从 Wireshark 捕获的数据包。

0 投票
0 回答
1107 浏览

c# - 如何使我的 struct blittable?

我正在使用 RakNet 作为 C# 的 C 插件。我可以很好地接收数据包并根据需要char*投射它们,而无需复杂的互操作。然而,作为一种生活质量调整,我决定我最好返回一个包含数据包信息的结构,而不仅仅是数据本身。尽管结构相当简单,但我无法让它工作:byteIntPtr

在 C 中:

在 C# 中:

我在做什么错/我如何使这个 blittable?

0 投票
1 回答
232 浏览

c++ - 我无法在 RakNet ( C++ ) 中创建服务器应用程序

我正在尝试使用 RakNet 在 C++ 中创建服务器应用程序。当我尝试以下代码时:

编译器给出此错误:

错误图片

我想我成功设置了 RakNet 缺少什么?