【vc++精品源码栏目提醒】:网学会员鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“【精品】二、windows网络编程基础 - 其它资料”一文,供大家参考学习
套接字 网络编程基础,编写网络程序人员忽略网 络协议栈的工作细节,将套接字看做一个 传递数据功能的对象 1Winsock概念 (1)Windows Sockets的概念。
它是一套网络编程机制(或规范),常简称为Winsock。
该规范是在20世纪90年代初制定的,是在Windows操作系统下得到广泛应用的、开放的、支持多种协议的网络编程接口。
(2)Windows Sockets的来源。
Sockets本来是UNIX操作系统下流行的一种网络编程接口(API),它是1983年在Berkeley(加州大学伯克利分校)4.2 BSD操作系统中被首先引入的,因此被称为“Berkeley Socket API”。
(3)Windows Sockets的版本。
目前常用的Winsock有两个版本:一个是16位的Winsock l.1,由动态链接库WINSOCK.DLL提供支持;另一个是32位的Winsock 2.2,由动态链接库WSOCK32.DLL提供支持。
2套接字类型 一般的网络系统都提供了以下3种不同类型的套接字: 流式套接字(SOCK_STREAM)。
数据报套接字(SOCK_DGRAM)。
原始套接字(SOCK_RAW)。
网络上所用应用程序的通信都是基于以上3种套接字进行的,如图1.35所示是网络上的两个Windows应用程序通过套接字通信的过程。
3基本概念 带外数据 广播 阻塞:函数执行结束才返回 非阻塞:无条件返回,不论函数执行是否 有需要的结果 客户机/服务器模型 4字节顺序与转换 htons htonl ntohs ntohl 5Winsock库 Winsock是windows下网络编程的标准接 口,与协议无关的接口 Winsock有两个版本,winsock1和 winsock2.开发winsock2程序需要在程序中 包含头文件winsock2.h并且要添加 WS2_32.lib的链接 6API函数 1 包含要调用函数的声明文件,即头文件 2 连接到指定的库文件,lib文件。
VC默认 已经连接了常用的lib文件。
显式链接使用 pragma commentlib”WS2_32.lib” 3 API函数前面加::表示一个全局函数的调 用,与c成员函数相区分。
可以打开 msdn查看相关信息 7Winsock2与winsock1 Winsock2允许多种协议并存,而winsock把应用 限定在TCP/IP里,winsock2可以透明地选择协议 Winsock1实现了API和TCP/IP协议的独占, winsock2定义了api和底层协议间的标准服务提供 接口SPI,使得一个winsock dll能够同时访问不同 软件开发商的多个底层协议栈 源码和二进制代码的向后兼容,实现和任何版本 的winsock间的互操作性 Winsock2 引入重叠IO机制 8Winsock库的装入和释放 调用winsock函数前需要加载响应的 winsock库,如果没有加载则winsock函数 返回错误SOCKET_ERROR,出错代码是 WSANOTINITIALISTED。
加载winsock库 的函数是WSAStartup 9WSAStartup wversionRequested参数用来指定想要加载 的winsock库的版本,可以使用宏 MAKEWORDxy建立,x高字节y低字节 10lpWSAData 11检测版本 IfLOBYTEwsaData.wVersion2HIBY TEwsaData.wVersion2 WSACleanup return 12 函数调用成功返回0否则要用 WSAGetLastError函数查看出错的原因 释放winsock库: Int WSACleanupvoid 13Winsock寻址 Winsock要兼容多个协议,因此要使用通用 的寻址方式 struct sockaddr u_short sa_family //指定地址家族 char sa_data14 /协议相关的地址,不同的地 址家族存储内容不同/ 14Tcp/IP v4地址结构struct sockaddr_inshort sin_family /套接字地址族/U_short sin_port /16位的TCP或UDP端口号/ struct in_addr sin_addr /32位的IPv4地址/ char sin_zero8 /暂不用,总置为0/ 15说明 Sin_family域设定为AF_INET,使用的是 ipv4地址家族 Sin_port指定端口,端口号分成三种: 0——1023:IANA管理,公共服务使用 1024——49151 普通的用户注册的端口号 49152——65535动态或私有的端口号 应使用1024以上的端口号 16说明 Sin_addr存储IP地址,可以多种方式给它填 充,因为内部是一个联合。
逐字节、逐字 或者直接双字填充 最后一个域sin_zero没有使用,为了与 SOCKADDR结构大小相同才设置的 17字符串地址到值转换 Unsigned long inet_addrconst char cp 将“127.0.0.1”这样的地址转换为网络顺序存 储的32位二进制数 Char inet_ntoastruct in_addr in将32位 二进制数转换为字符串 18WinsockTCP网络信息发送接收 服务端: 客户端: 1套接字的创建和关闭 1 套接字创建和关闭 2 绑定套接字到指定的 2 申请建立连接 IP地址和端口号 3 收发数据 3 设置套接字进入监听 状态 4 断开连接,关闭 4 接收连接请求 5 收发数据 19任务 画出流程图 写出主要函数的名字 20