问题标签 [enet]

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 回答
2966 浏览

c++ - 使用 ENet 从谷物发送二进制数据的 StringStream

几周以来,我一直致力于将 ENet 封装成一组易于使用的函数,但似乎有点问题。

我有一个 std::stringstream 并尝试使用 ENet 将内容发送到远程机器,然后在远程机器上重建 std::stringstream。

我需要使用 std::stringstream 的原因是因为我正在使用需要流的 Cereal Serialization Library 序列化我的数据。

在 Azoth 的帮助下,他确定我需要使用 std::istringstream 和 std::ostringstream。以前我只使用导致异常的 std::stringstream 。

然而,现在在便携式_binary.hpp 第 156 行的 Cereal 中引发了一个异常:

这就是我正在做的事情:

谷物便携式二进制数据存档被构造为保存单个向量。使用 ENet 将 std::ostringstream 发送到主机。

这部分似乎工作正常,我可以打印前后的信息,看起来是一样的,虽然有一些奇怪的符号,但它们在两端打印出来的都是一样的。

现在使用我们收到的数据在主机上创建一个 std::istringstream。

此时我在行收到异常:

我感觉数据在通过 ENet 发送时正在以某种方式发生变化和/或我没有正确地将数据从 std::ostringstream 中提取出来和/或没有正确地将数据放回 std::istringstream 中。

非常感谢您的宝贵时间,我非常感谢。

0 投票
3 回答
1950 浏览

c++ - 使用 ENet 进行 NAT 打孔

我一直在寻找一个简单的 UDP C++ 库,它提供了一段时间的可靠性。我刚刚遇到 ENet,它看起来很完美,只是我在文档中找不到任何对 NAT 打孔的支持。互联网上似乎有一些人在讨论这个问题,但我还没有找到是否可能的明确答案。

我已经有一个第三方服务器,它被配置为向客户端分发外部 ips 和端口。

如果可能的话,有人可以提供一些描述该过程的伪代码/步骤吗?

0 投票
1 回答
2025 浏览

ios - 使用 Xcode 中现有的 C 代码为 iOS 制作静态库

问题的简短版本:

所以基本上我想要做的是采用一个用 C (https://github.com/lsalzman/enet)编写的现有库并将其变成 iOS 的静态库。

我只是在寻找一个易于理解的一步一步如何在 Xcode 中完成此操作。

长版:

我已经阅读了一些教程来制作一个用 Objective-C 编写的简单静态库(http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial),我通常了解那里发生了什么,但我无法理解如何使用用 C 编写的现有代码来做到这一点。

我想我快要接近了,但我不太确定。

  1. 我首先在 xcode 中制作了一个“Cocoa Touch 静态库”项目。
  2. 我添加了所有的 enet .h 和 .c 文件
  3. 确保 enet 内容位于构建设置中的“用户标头搜索路径”中。
  4. 点击构建 - 它编译!

生成的 .a 文件是 517kb,所以我很确定它现在正在构建 enet 的东西。

我现在的问题是库的头文件基本上是空的:

我在想我要么需要在 Objective-C 中编写一个与 enet 库对话的包装器,要么我需要以某种方式重新配置我的 xcode 项目,以便 enet.h 是这个库的“入口点”,而不是 xcode 的 pre-生成 .h/.m 文件。不过,我不确定该怎么做。理想情况下,我只想跳过任何类型的包装器并使用 enet 库已经为我提供的东西。

谢谢参观!

0 投票
1 回答
433 浏览

rust - 指定为特征而不是具体类型的可选函数参数

过去几个月我一直在关注 Rust,但我刚刚开始了一个实际项目。我不确定标题中的术语是否正确。请让我知道如何纠正它。

我正在围绕 ENet 库 ( http://enet.bespin.org ) 编写一个 rust 包装器。我的目标是使 rust API 尽可能与 C API 相似,除了重构将 C 样式句柄指针转换为结构对象的成员函数的函数。我想保持 API 相似,以便官方 C 文档同样适用于 rust wrapper。

ENet 公开了一个函数来创建客户端主机或服务器主机。创建服务器时,您将指向 IP 地址结构的指针传递给函数。创建客户端时,您传递 NULL。

我正在尝试使用该ToSocketAddr特征来模拟该行为,Option但是将它们结合使用时遇到了问题。

这是我正在尝试做的一个简化示例:

第一次调用create_host()就像一个魅力。但是,第二次调用不会编译。

Rustc 回归

我猜这个错误正在发生,因为None没有为 generic 提供任何解决方案A。我尝试了以下方法,但这也不起作用,因为ToSocketAddr没有实现 trait core::kinds::Sized

有没有办法可以做到这一点,还是我需要采取不同的方法?

0 投票
1 回答
709 浏览

c - 实时多人游戏延迟补偿

简而言之,我正在开发一款实时多人游戏。在我的游戏中,客户端以 20Hz 的频率向服务器发送更新的位置和速度数据。在下面的示例代码中,我使用 LuaJIT FFI 将 Lua 表中的数据转换为 C 结构。这是一种通过网络传输数据的绝妙方式:

当服务器接收到数据包时,它会尝试调整数据以补偿该特定客户端与其自身之间的延迟:

数据标准化后,它将更新的位置信息广播给所有其他客户端:

当其他客户端最终获得数据包时,它们会根据与服务器的延迟来调整数据:

所以这就是问题所在:对象非常紧张。每次我收到一个数据包时,其他玩家都会向前或向后弯曲一点,所以我的延迟补偿似乎关闭了,这使得我的插值关闭。也许有人可以指出我的代码中的一些明显缺陷,或者我对流程如何工作的理解?

0 投票
1 回答
286 浏览

c - TFTP 客户端(基于 ENET)不会连接到远程 TFTP 服务器

我正在尝试在 C(Windows,Visual Studio 2005)中实现一个 TFTP 客户端。

TFTP 客户端应该连接到端口 69 上的远程 TFTP 服务器地址。

TFTP 客户端正在使用 ENET API 进行网络连接,但我无法让它工作。

TFTP 客户端永远不会切换到“CONNECTED”状态并停留在“CONNECTING”状态。

当我在 Windows 7(cmd、Windows 控制台)上运行本机 Windows TFTP 客户端时,连接到 TFTP 服务器没有问题,我可以毫无问题地检索远程文件。

所以我一定在下面的代码中做错了,我希望有人能告诉我我做错了什么:

0 投票
2 回答
83 浏览

c - GCC 报告包含的不相关错误

我在项目中添加了一个新文件:

如果include存在,我会得到大量error: expected ';', ',' or ')' before numeric constant不相关的文件。如果我删除includevoid * peer改用,一切都很好。enet 库包含在其他地方的源文件中,并且工作正常。我正在使用 enet 1.3.13(最新),它的标头保护似乎就位。这是在 gcc 4.9.2 下。

作为记录,错误发生在Point.h

我敢肯定这很简单-知道我做错了什么吗?

0 投票
1 回答
1036 浏览

c++ - ENet c++ 库的最大数据包大小

我正在尝试使用ENet库,它用于使用可靠的 UDP 套接字进行编程。在Feature官方网站的标签上,它说:

ENet 将发送和传递数据包,无论大小。大数据包被分割成许多大小合适的较小数据包,并在外部主机上重新组装以恢复原始数据包以进行传递。该过程对开发人员完全透明。

我用一个简单的服务器/客户端进行了测试,向服务器发送1k数据是可以的,但是当数据增长到2k时,服务器似乎没有收到。

我的代码:

// 服务器

//客户

代码有什么问题吗?

0 投票
1 回答
1492 浏览

linux - SIGSEGV,分段错误。仅在linux上,它适用于windows

我已经坚持了几个小时,由于某种原因,我只在 Linux 上遇到了分段错误错误。它只发生在长度为 17 个或更多字符的数据包中。我正在使用Enet库发送数据包。任何人都可以帮助我,我不知道我在这里错过了什么......

这是 gdb 输出的屏幕截图 这是gdb输出的截图 这是服务器端示例:

这是客户端创建数据包然后发送到服务器的方式。

如果代码示例不够,我可以提供更多。

0 投票
0 回答
315 浏览

ios - ENet:无法从 iOS 真实设备连接到本地服务器,但在使用桌面客户​​端时可以正常工作

当我继续使用 iOS 设备(即 iphone 5 iOS 8.3)检查这个很棒的库时, 当我尝试连接从我的 xCode 运行的服务器时,我遇到了
奇怪的(或不是)连接错误。
并且 Iphone 应用程序也从 xcode 运行。
该行:
if (enet_host_service(client, &event, 1000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT)

不要通过并跳转到:
enet_peer_reset(peer);

但是当我从我的桌面作为简单的客户端/服务器应用程序运行这段代码时,一切都运行良好。
这是我从一些互联网站点获取的代码。
请注意,我将 HOST 设置为我的 Mac : echo $HOSTNAME。也许这是问题所在,iPhone 无法连接我的 Mac .. 我不知道
如何检查这个?
谢谢
这是代码:

客户端桌面:

客户端 Iphone 设备(cpp 游戏引擎的一部分)编译良好。


服务器