我正在使用 MS Visual C++ Express 为 C++ 寻找一个简单的套接字接口

Posted

技术标签:

【中文标题】我正在使用 MS Visual C++ Express 为 C++ 寻找一个简单的套接字接口【英文标题】:I am looking for a simple socket interface for C++ using MS Visual C++ Express 【发布时间】:2010-11-10 18:23:53 【问题描述】:

在 C++ 中是否有一个简单的套接字接口可以与 MS Visual Studio Express Edition 一起使用?我知道有 WinSock 库,我想我正在寻找一个更易于使用的包装器。

我认为 java.net 库足够简单,但是我必须使用 MS VC++ Express。有什么等价的吗?

【问题讨论】:

以前写简单套接字代码的程序员大多已经死了。 bsd/win 套接字代码实际上非常简单。它的复杂性在于处理流的性质,我看到的每个“简单”包装器都重新暴露了相同的问题。 这是什么应用程序?使用网络的命令行工具(如 wget 或 ftp)?使用网络的 GUI 应用程序(如 Web 浏览器)?使用网络的后台服务(如 Windows 更新)?后台网络服务器(如 Web 服务器或 ftp 服务器)?在一种环境中运行良好的包装器对于其他应用程序来说是可怕的。 【参考方案1】:

查看Boost Asio。

【讨论】:

复杂 - 是的,简单 - 不。【参考方案2】:

我曾经在套接字级别工作过很多,如果这就是您所需要的,那么是的,Boost::Asio 很棒,虽然有点令人困惑。

但是,如果您只需要在进程之间(在相同或不同的机器上)传递数据,那么我会更进一步,看看ØMQ 之类的东西;看看从另一个进程接收“消息”是多么容易:

zmq::context_t ctx(1);

zmq::socket_t sock(ctx, ZMQ_REQ);
sock.connect("tcp://localhost:5555");

zmq::message_t msg;
while(sock.recv(&msg)) 
    std::string s(static_cast<char*>(msg.data()), msg.size());
    std::cout << s;

发送同样简单。

zmq::context_t ctx(1);

zmq::socket_t sock(ctx, ZMQ_REP);
sock.bind("tcp://*:5555");

std::string s = "Hello you!";
zmq::message_t msg(s.size());
memcpy(msg.data(), s.data(), s.size());

while(true) 
    sock.send(msg);
    sleep(1);

ZeroMQ 非常轻量级,它负责连接、重新连接、传输、成帧等……您所需要的只是您想要显示在管道另一端的“消息”有效负载(在此如果我们只使用简单的字符串)。

它还处理许多更高级的消息传递技术,例如 pub-sub(同一消息的多个接收者)。

【讨论】:

api.zeromq.org/zmq_cpp.html 是 C++ 绑定;从主页开始,有一点“他为什么推荐用于 C++ 的 Python 库?” 是的,对不起。关于 ZeroMQ 的一个很好的想法是它具有针对非常多语言的绑定,因此互操作非常简单。 zeromq.org/bindings:_start 虽然它是用 C++ 原生实现的,所以 C++“绑定”只是库的原生接口。

以上是关于我正在使用 MS Visual C++ Express 为 C++ 寻找一个简单的套接字接口的主要内容,如果未能解决你的问题,请参考以下文章

发现凸缺陷?在 OpenCV 2.3 中,c++ 与 MS Visual Studio 2010

python gmpy 使用 MS Visual C++ Compiler Package for Python 2.7 安装错误

将新的 MS C++ 编译器与旧的 Visual Studio 一起使用

请参阅 MS Visual Studio 2010 中 GUI C++ 应用程序的控制台输出

在 MS Visual C++ 中启用 VLA(可变长度数组)?

是否有免费的开源工具供 MS Visual C++ Express 使用 gcc 构建?