在Windows环境中与C / C ++联网

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

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

有人能给我一个WININET使用的例子吗?

也许是ftpgetfile()

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

你需要什么水平? HTTP / FTP? 或者“只是套接字”为您自己的协议? 你需要什么类型的性能(连接数量,预期的速度)?

如果您选择使用原始API,则通常应该远离WSAAsyncSelect,因为在“少数”并发连接之上的性能很糟糕。 阻塞套接字和每个套接字也不是太热。 WSAEventSelect稍微有点棘手,但能够很好地完成工作(μtorrent以这种方式处理大量的并发连接)。 花哨裤真正的高负荷将是I / O完成端口。 你也可以考虑增强ASIO的一些便携性。

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


对于使用WinINet函数,尝试从这里开始 – 可能不是一个示例,但至少给你足够的东西谷歌;)

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

你的意思是在Windows上的异步I / O模型? 有选择,WSAAsyncSelect,WSAEventSelect,重叠的I / O,I / O完成端口,也可以使用都是跨平台的Libevent和Boost Asio。

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

使用你的方法可以在漂亮的platofrm中找到,而不依赖于lib – boost :: asio

如果你正在使用这个学习体验,我也会看看ACE 。 一个C ++跨平台框架,实现了“并发网络和联网对象模式”中讨论的许多模式 。 作者也写了ACE(见这里 )。