草庐IT

c++ - winsock在哪里存储套接字的IP地址?

假设我有一个简单的winsock服务器,它有一个监听套接字,然后当一个连接被接受时,它将套接字存储在一个套接字数组中(以允许多个连接)。如何获取特定连接的IP地址?它存储在套接字句柄中吗? 最佳答案 只要套接字保持连接状态,您就可以获得自己的套接字地址和对等套接字地址。getsockname将为您提供本地名称(即从管道的一侧)getpeername将为您提供对等名称(即管道的远端)此信息仅在打开/连接套接字时可用,因此最好将其存储在某个地方,如果它可以在对等断开连接后使用。 关于c++-

c++ - WSACleanup 和 atExit

通过atExit函数注册WSACleanup可以吗?我们有几个应用程序可以在代码中的不同点终止,因此我们希望避免在整个代码中到处放置WSACleanup。目前我们通过DllMain调用WSAStartup/WSACleanup因为我们有一个dll被所有这些应用程序使用。但是,Microsoft严格建议不要通过DllMain使用WSAStartup/WSACleanup,因为这会导致死锁。我们可以将WSAStarup移出DllMain,并在所有应用程序访问Windows套接字库之前在代码中的某个位置调用它。而且,一旦我们调用WSAStartup,我们就想使用atExit函数来注册对WSA

c++ - 错误 WinSock.h 已包含 Boost Windows Qt

我在Qtcreator上使用boostlib开发应用程序,我的平台是Windows8MSVC201364。我在每个类上都有两个类,我正在使用boostheader,现在我需要使用这个类,当我从另一个源文件中包含这些类头时,我得到了错误errorWinSock.hhasalreadybeenincluded在我的拳头课上,我添加了类似boost的标题#defineWIN32_LEAN_AND_MEAN#include#include#include#include#include#include#include#include#include#include#include#includ

c++ - Winsock 2 可移植性

我正准备用C++开发一些与套接字相关的东西,并希望该软件从一开始就尽可能在Windows和Linux之间可移植(稍后使其可移植很棘手。)我看过不同的库,有一个来自alhem.net的C++当然还有boost::asio。boost::asio看起来很有前途,但对于这么小的应用程序来说将是一个非常大的依赖。是否值得自己编写这些东西,还是我应该只使用库?如果我自己做,主要的陷阱是什么? 最佳答案 我开发了一些围绕套接字的可移植包装器。确保您不会走上由WinSock2事件构成的不归路。除此之外,在我看来,最大的区别是:要在Windows中

c++ - 在 C/C++ 中通过套接字发送 int

我在通过套接字发送整数数组时遇到了麻烦。代码看起来像这样程序一:(在windows上运行)intbmp_info_buff[3];/*connectingandothers*//*Sendinformationsaboutbitmap*/send(my_socket,(char*)bmp_info_buff,3,0);程序2:(在中微子上运行)/*bufftostorebitmapinformationsize,with,length*/intbmp_info_buff[3];/*stuff*//*Readinformationsaboutbitmap*/recv(my_connect

Winsock套接字开发网络聊天室实例(C/S)模式

聊天室的基本要求聊天器采用客户端/服务器(C/S)模式;1,客户端利用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯;2,服务器端具有服务器端口设置,维护客户端个人信息,记录客户端状态,分配账号等功能   客户端具有服务器地址及端口设置,用户注册,用户登陆,添加好友和删除好友,查看好友信    息,给好友发送消息等功能;3,服务器与客户端间、客户端之间的交互采用控制台方式或GUI窗口方式均可;聊天器实例的实现情况1,程序完成了基于客户端/服务器(C/S)模式的设计目标,模拟出类似于QQ聊天室的应用方式,并实现其相关的基本功能。2,程序完成了基于UDP的设计目标,实现了客户端与服务器,

c++ - 特定接口(interface)上的 TCP/IP 连接

我想使用两个网络路由之一连接到服务器。如何做到这一点?我在谷歌上搜索了很多,常见的答案是摆弄路由表,但这无济于事,因为目的地只有一个IP地址。大多数示例都以具有单个网卡的客户端和具有多个NIC的服务器为特征,但在本例中恰恰相反。ForceBindIP应用程序似乎能够提供此类功能,所以我想这一定是可能的。+----->-------+192.168.1.3|B|192.168.1.4+--------++--------++--------+|Client||Switch|-->---|Server|+--------++--------++--------+192.168.1.2|A|

c++ - std::bind 和 winsock.h 绑定(bind)混淆

我正在处理一个非常大的项目,在一个文件中我们突然遇到编译时错误,编译器似乎认为我们对winsock.hbind()的调用实际上是对std::bind()的调用。似乎在包含文件中的某处有usingnamespacestd代码片段。我们可以尝试找到这些usingnamespacestd在哪里被使用并删除它们,但也许有更好的方法来做到这一点? 最佳答案 您可以更改您的调用以使用::bind()来指定全局命名空间。 关于c++-std::bind和winsock.h绑定(bind)混淆,我们在S

c++ - 如何在 C++ 中使用 winsock 接收 udp 数据包?

作为对udp套接字进行深入研究的尝试,我尝试从本教程页面移植代码http://www.linuxhowtos.org/C_C++/socket.htm到winsock(如果重要的话,在win8上运行)。[下面的直接链接]代码目前可以编译和运行,但我从未收到数据包,两个程序只是等待并阻塞在recvfrom()上。我一直遇到同样的问题(例如,此代码的修改版本https://stackoverflow.com/a/679529/873217包括recvfrom()调用。并使用此代码C++problemwithDatagram(UDP)winsockettosendtoandrecvfromo

C++ Winsock P2P

设想有没有人有使用Winsock在C++中进行点对点(p2p)网络的好例子?这是我对特别需要使用这项技术的客户的要求(天知道为什么)。我需要确定这是否可行。任何帮助将不胜感激。编辑我想避免使用库,以便我可以理解底层源代码并进一步了解我的知识。 最佳答案 由于我不知道您要查找什么信息,我将尝试描述如何设置套接字程序以及我遇到的陷阱。首先,阅读Winsocktutorial来自MSDN。这是连接、发送消息和断开连接的基本程序。非常适合了解套接字编程。有了这个,让我们开始:注意事项:阻塞或非阻塞首先,您需要确定您想要阻塞程序还是非阻塞程序