在 Windows 环境中使用 C/C++ 联网

Posted

技术标签:

【中文标题】在 Windows 环境中使用 C/C++ 联网【英文标题】:Networking with C/C++ in a Windows environment 【发布时间】:2009-03-23 06:48:38 【问题描述】:

在 Windows 平台上使用套接字的最佳方式是什么?

我猜是基本的套接字,TCP/IP。 也许是为了聊天客户端,或者只是为了学习。

谁能给我一个WININET使用的例子?

也许是 ftpgetfile()

【问题讨论】:

【参考方案1】:

这是一个非常广泛的问题,很大程度上取决于您的需求。

你需要什么级别? HTTP/FTP?还是您自己的协议的“只是套接字”?您需要什么样的性能(连接数量、预期速度)?

如果您选择使用原始 API,您通常应该远离 WSAAsyncSelect,因为在“几个”并发连接之上性能非常糟糕。阻塞套接字和每套接字线程也不是太热。 WSAEventSelect 有点棘手,但可以很好地完成工作(µtorrent 以这种方式处理 很多 个并发连接)。 Fancypants 真正的高负载将是 I/O 完成端口。您还可以考虑使用 boost ASIO 以获得一些可移植性。

如果您想使用 HTTP/FTP 等标准协议,请检查 libcurl。或者,对于较少的需求和较小的开销,标准的 Windows WININET 功能(虽然有很多限制)。


对于使用 WinINet 函数,请尝试从 here 开始 - 可能不是示例,但至少可以为您提供足够的东西来谷歌搜索;)

【讨论】:

【参考方案2】:

对于带有 TCP/UDP 的基本客户端服务器应用程序,winsock 应该足够了。

【讨论】:

【参考方案3】:

您是指 Windows 上的异步 I/O 模型吗? 有select、WSAAsyncSelect、WSAEventSelect、Overlapped I/O、I/O Completion Port,你也可以使用Libevent和Boost Asio,它们都是跨平台的。

【讨论】:

【参考方案4】:

您可以在 msdn 或 codeproject.con 中找到 WinInet 示例

您可以在不错的 platofrm 独立库中找到使用方法 - boost::asio

【讨论】:

【参考方案5】:

如果您希望将此作为学习经验,我也会查看ACE。一个 C++ 跨平台框架,实现了Patterns for Concurrent Network and Networked Objects 中讨论的许多模式。作者也在 ACE 上写过文章(见here)。

【讨论】:

以上是关于在 Windows 环境中使用 C/C++ 联网的主要内容,如果未能解决你的问题,请参考以下文章

VSCode在windows下C/C++环境配置

Windows 下使用 VScode 运行 C/C++ 程序

c_cpp c ++かつwindows环境におけるメモリ使用量の取得方法

基于Windows 的 VS Code C/C++ 编译环境搭建

基于Windows 的 VS Code C/C++ 编译环境搭建

基于Windows 的 VS Code C/C++ 编译环境搭建