我正在寻找一个最简单(也是最快)的 Windows、C 或 C++ 的 TCP 套接字编程示例,无论哪种都可以更快地完成,发送简单的数据,例如 1 个字节或多个字节,但在一个数据包中。这是为了研究目的。我用谷歌搜索并找到了几个例子,但是它们中的每一个看起来都有点不同,有些是用C语言编写的,有些是用C++语言编写的,有些使用ZeroMemory(来自Windows),有些使用memset,有些以不同的方式分配数据,所以虽然我可以找到 c/c++ 中的 winsock 示例,并且虽然我不是套接字编程方面的专家,但我不确定以最快的方式完成它的绝对简约的 c/c++ 代码是什么。
我知道 UDP 会快得多,但它同时需要可靠,因此我正在寻找 TCP。
我想我可以尝试它们中的每一个并尝试对它们进行计时,但想知道这里的某些套接字/winsock专家是否会在C/C++中拥有一个超级简单的服务器/客户端,并在最后带有一些计时功能(高分辨率)。 我说超级简单,因为我正在尝试确定套接字在我的机器上传输的速度(以及最快的方式)有多快,当然它可以包括关闭Nagle的算法,无论如何这都是我想做的。我不确定人们还使用什么其他技巧。
谢谢。
尝试 Len Holgate 的套接字服务器框架。我相信他已经将其商业化为打包版本,但这应该是一个很好的起点。其中包含一个客户端实施教程。这不是最简单的代码,但如果您有兴趣最大化性能,简单的代码可能无法满足您的需求。
您必须添加自己的计时支持,但这对于任何可能的现成软件包都是如此。
Boost Asio 可能是您最好的选择。这是一个非常好的库,提供计时支持以及您开始使用所需的一切。
编辑:我知道这不是一个预先构建的客户端/服务器,这正是您正在寻找的,但 Asio 使您可以非常轻松地从几行代码中获得您想要的东西。
如果您想要现成的产品,请查看任何可用的消息传递产品。它们需要最少的编码才能开始,典型的例子是:
开源:
商业:
最后三个假设你有几百万美元! ;)
我所知道的最简单的例子在Beej's Guide中。
在写第三条评论之前,我将它们收集在答案中
RUDP 可靠且快速,因为它省略了连接设置:en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol ;另请参阅当您需要可靠的 UDP 时,您会使用什么?
出自 Steven 的《UNIX 网络编程 I》,第 14 页。 369 我建议至少在 FreeBSD 上实现 T/TCP:http://www.manpages.info/freebsd/ttcp.4.html
我刚刚使用 socket++ 实现了一个网络解决方案,并且效果很好。我相信它是boost asio的基础,所以如果你不想安装所有的boost,你可以检查一下。
该库的要点是您可以在套接字中使用流,将数据发送到 std::cout 或 std::cerr。
编辑:如果您使用的是较新版本的 Windows,则此库需要进行一些调整才能编译(对于 XP,它按原样工作正常,但显然一些网络代码已针对 win vista 和 7 进行了移动)。
您可以查看推送框架。