寻找一个最简单(也是最快)的 Windows、C 或 C++ 的 TCP 套接字编程示例

问题描述 投票:0回答:8

我正在寻找一个最简单(也是最快)的 Windows、C 或 C++ 的 TCP 套接字编程示例,无论哪种都可以更快地完成,发送简单的数据,例如 1 个字节或多个字节,但在一个数据包中。这是为了研究目的。我用谷歌搜索并找到了几个例子,但是它们中的每一个看起来都有点不同,有些是用C语言编写的,有些是用C++语言编写的,有些使用ZeroMemory(来自Windows),有些使用memset,有些以不同的方式分配数据,所以虽然我可以找到 c/c++ 中的 winsock 示例,并且虽然我不是套接字编程方面的专家,但我不确定以最快的方式完成它的绝对简约的 c/c++ 代码是什么。

我知道 UDP 会快得多,但它同时需要可靠,因此我正在寻找 TCP。

我想我可以尝试它们中的每一个并尝试对它们进行计时,但想知道这里的某些套接字/winsock专家是否会在C/C++中拥有一个超级简单的服务器/客户端,并在最后带有一些计时功能(高分辨率)。 我说超级简单,因为我正在尝试确定套接字在我的机器上传输的速度(以及最快的方式)有多快,当然它可以包括关闭Nagle的算法,无论如何这都是我想做的。我不确定人们还使用什么其他技巧。

谢谢。

c++ windows performance sockets winsock
8个回答
2
投票

尝试 Len Holgate 的套接字服务器框架。我相信他已经将其商业化为打包版本,但这应该是一个很好的起点。其中包含一个客户端实施教程。这不是最简单的代码,但如果您有兴趣最大化性能,简单的代码可能无法满足您的需求。

您必须添加自己的计时支持,但这对于任何可能的现成软件包都是如此。


1
投票

Boost Asio 可能是您最好的选择。这是一个非常好的库,提供计时支持以及您开始使用所需的一切。

编辑:我知道这不是一个预先构建的客户端/服务器,这正是您正在寻找的,但 Asio 使您可以非常轻松地从几行代码中获得您想要的东西。


1
投票

如果您想要现成的产品,请查看任何可用的消息传递产品。它们需要最少的编码才能开始,典型的例子是:

开源:

  1. OpenDDS - 基于 DDS 协议(非常高性能 - 用于潜艇、船舶控制系统等)它们的实现比原始 boost::asio 稍慢,但是为了易于使用和附加功能,很难击败。
  2. ZeroMQ - 与DDS类似,但基于MQ协议,同样非常快(数百万条消息/秒),MQ建立了,但ZeroMQ还没有。
  3. AMQP - 我相信您将能够在这个领域从 Red Hat 找到一些东西,同样非常快,并且是一个新协议。

商业:

  1. Tibco RV:很难被击败,除了硬件供应商
  2. 29West - 硬件(和软件 - 我想我从来没有亲自玩过它)
  3. Solace - 硬件
  4. Tervella - 硬件

最后三个假设你有几百万美元! ;)


1
投票

我所知道的最简单的例子在Beej's Guide中。


0
投票

在写第三条评论之前,我将它们收集在答案中


0
投票

我刚刚使用 socket++ 实现了一个网络解决方案,并且效果很好。我相信它是boost asio的基础,所以如果你不想安装所有的boost,你可以检查一下。

该库的要点是您可以在套接字中使用流,将数据发送到 std::cout 或 std::cerr。

编辑:如果您使用的是较新版本的 Windows,则此库需要进行一些调整才能编译(对于 XP,它按原样工作正常,但显然一些网络代码已针对 win vista 和 7 进行了移动)。


0
投票

您可以查看推送框架


0
投票

ucspi-tcp

老但好东西,用C编写,广泛使用的qmail邮件服务器就是基于它的。

https://cr.yp.to/ucspi-tcp.html

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.