问题标签 [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.
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 专家在这里解释真正发生的事情。
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 一起使用?
谢谢!
c++ - 无法使用 RakNet... 链接错误
(注意:我使用的是 Visual Studio 2013)
我正在尝试在我的项目中使用 RakNet,但遇到了很多问题。
如果我尝试在没有 lib 文件的情况下进行编译:
如果我尝试使用我在 VS2013 中编译的 RakNet 静态库文件进行编译:
我只有在#include "RakPeerInterface.h"
.
如果我能在某处找到预编译的库,也许会有所帮助?
c++ - RakNet 63 会话限制
我在 windows server 2008 上使用 raknet 进行 tcp 网络,它可以接受很多连接,但不能从所有连接中接收数据包:只能读取 63 个客户端的数据包。
这是我的接收代码:
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 会自动处理数据包损坏并在数据包太大时在内部拆分数据包。
任何帮助表示赞赏。
c++ - 为什么 RakNet 的 SetNetworkID 会导致断言失败?
所以我有一个基于 RakNet 的 NetworkIDObjects 创建对象的工厂。如果是权限,那么它只会创建一个新对象,否则它将创建对象然后设置网络 ID:
这对于在客户端生成的前几个 NetObjects 工作正常,但第三个总是在 SetNetworkID 中崩溃:
使用以下调用堆栈:
我在其他任何地方都找不到有关此错误的任何信息,也无法弄清楚这个特定对象有什么不同。NetworkID 似乎与之前的对象没有什么不同(除了它增加了一个)。据我所知,没有什么明显的原因可以导致这次崩溃。
terrain - 使用 RakNet 发送地形高度数据
我生成一个像这样的字符串:
高度数据量为 MapSize^2(MapSize 通常为 256x256)。但问题是 - 这是通过 RakNet (UDP) 发送的合理数据量吗?我可以将数据分成块,但我想避免这样做。
java - 如何为现有的 Raknet 应用程序制作代理
我目前正在尝试为使用 Raknet 协议的应用程序制作代理。我希望能够接收客户端连接,记录/操作它并将其发送到服务器,但是我在复制协议时遇到了困难。我最好尝试在 Java 中执行此操作,但如果需要,我不介意切换语言。
我尝试使用标准 Java 套接字和 Netty 套接字,但是当我尝试立即转发连接时,它被拒绝了。
任何人都可以通过指出我复制协议的正确方向来帮助我吗?
如果需要,我可以提供从 Wireshark 捕获的数据包。
c# - 如何使我的 struct blittable?
我正在使用 RakNet 作为 C# 的 C 插件。我可以很好地接收数据包并根据需要char*
投射它们,而无需复杂的互操作。然而,作为一种生活质量调整,我决定我最好返回一个包含数据包信息的结构,而不仅仅是数据本身。尽管结构相当简单,但我无法让它工作:byte
IntPtr
在 C 中:
在 C# 中:
我在做什么错/我如何使这个 blittable?