网络

您所在的位置:网站首页 网络编程入门教程 网络

网络

2024-06-01 09:29| 来源: 网络整理| 查看: 265

作者:小 琛 欢迎转载,请标明出处

引言:之前关于网络编程的博文都是基于Linux环境下,而因为后续工作的原因,开发环境为Windows故而学习该内容。实际学习中发现,整个编程思路和流程并没有很大差别,仅仅在于些许语法和库文件上。

文章目录 socket、Windows下的socketWindows下构建WinSock应用程序框架头文件与库结构体WSADATA初始化函数WSAStartsup()、清除函数WSACleanup() 网络编程的常用辅助函数例子:通过一个控制应用程序实现初始化一个Windows Sockets 并打印具体信息

socket、Windows下的socket

什么是socket?

socket这个词,字面意思为:凹槽、插座、插孔,这些设备在生活中给我带来了很多方便。而socket也同样可以看作一个接口,它位于传输层和应用层之间,使得使用者可以直接从应用层操作而不需要考虑传输层。 如下图,使用者只需要在应用层操作socket开发接口,选择相应选项并赋予相应信息,就可以实现通信 在这里插入图片描述

Windows下的socket

socket编程接口起源与UNIX操作系统,后静发展,微软公司规范了Windows下的socket,全面继承了socket网络编程接口,这些接口几乎和UNIX下相同。差异在于:头文件和静态库、socket语法、初始化等。

Windows下构建WinSock应用程序框架 头文件与库

需要包含的头文件与库文件有两组,第二种实现了网络通信功能,现多数情况使用第二种: #include #pragma comment(lib,“wsock32.lib”) 或 #include #pragma comment(lib,“ws2_32.lib”)

结构体WSADATA

该结构体用于存储调用WSAStartup(socket的初始化函数,后文会讲解)函数后返回的Windows Socket数据,它包含了编程使用的具体信息

typedef struct WSAData { WORD wVersion; WORD wHighVersion; #ifdef _WIN64 unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; #else char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; #endif } WSADATA, FAR * LPWSADATA; 字段含义wVersionWindows Sockets DLL期望调用者使用的Windows Sockets规范的版本,为WORD类型。高位字节中存储副版本号,低位字节中存储主版本号。可以使用MAKEWORDO函数返回该值,例如 MAKEWORD(2,2)wHighVersionWindows Sockets DLL可以支持的 Windows Sockets规范的最高版本szDescription以null结尾的ASCII字符串。Windows Sockets DLL将对 Windows Sockets实现的描述复制到该字符串中,最多可以包含256个字符szSystemStatus以null结尾的ASCII字符串。Windows Sockets DLL将有关状态或配置信息复制到该字符串中iMaxSockets单个进程可以打开的最大Socket 数量。Windows Sockets可以提供一个全局的Socket,为每个进程分配 Socket资源。程序员可以使用该数字作为 WindowsSockets是否可以被应用程序使用的原始依据iMaxUdpDgWindows Socket应用程序能够发送或接收的最大UDP数据包大小,单位为字节。如果没有限制,则等于0lpVendorInfo指向销售商数据的指针 初始化函数WSAStartsup()、清除函数WSACleanup()

WSAStartup函数用于初始化Windows sockets,并返回SWADATA结构体(上面的那个结构体)即具体信息,只有调用该函数进行初始化后,应用程序才能正常调用其它的Windows socket API函数,实现网络通信。

WSAStartup( _In_ WORD wVersionRequested, _Out_ LPWSADATA lpWSAData );

参数说明:

wVersionRequested:调用者使用的版本,WORD类型,即高字节储存副版本号,低字节储存主版本号。通常使用MAKEWORD()函数返回该值,例如:MAKEWORD(2,2).loWSAData:指向WSADATA结构体的指针,接收数据,使用中通常将一个WSADATA结构体引用传入作为出参

WSACleanup()函数用于清除工作,若返回SOCKET_ERROR则清除出错

网络编程的常用辅助函数 unsigned long inet_addr(const char* cp),可将点分十进制的IP转换为unsigned long 类型的网络字节序格式u_short htons(u_short hostshort)、u_long htonl(u_long netlong)将主机字节序转为网络字节序u_short ntohs(u_short netshort)、ulong ntohl(u_long netlong)将网络字节序转为主机字节序 例子:通过一个控制应用程序实现初始化一个Windows Sockets 并打印具体信息 #include #include #pragma comment (lib,"ws2_32.lib") using std::cout; using std::endl; int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){ printf("WSAStartup error\n"); return 0; } //打印相关信息 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3