欢迎来到天天文库
浏览记录
ID:14081589
大小:64.00 KB
页数:7页
时间:2018-07-25
《基于windows的网络编程研究》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于Windows的网络编程研究1.基本概念的清晰①网络编程:通过使用套接字来达到进程间通信目的编程就是网络编程。windows提供的基于网络编程的就是套接字也就是winsock。②WindowsSockets:WindowsSockets顾名思义,它就是在Windows环境下使用的一套网络编程机制(或规范),常简称为Winsock。③套接口:WindowsSocketsAPI依靠套接口(Socket)进行通信,套接口可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点,这个端点是个逻辑上的概念。其本质是通信过程中所要使用的一些缓冲区及其一些相关的数
2、据结构。④阻塞与非阻塞通信:在网络编程当中,可以将通信分为阻塞与非阻塞两种模式,对于不同的协议,阻塞和非阻塞通信有不同的表现。以套接口编程为例,在阻塞模式下,利用TCP发送一个报文时,如果低层次协议没有可用空间来存放用户数据,则应用进程将阻塞(即进行等待),直到有可用的空间,而在非阻塞模式下,调用将直接返回,而不需要等待。在应用进程调用接收函数接收报文时,在阻塞模式下,若没有到达数据,则调用将一直阻塞直到有数据到达或出错为止,而在非阻塞模式下,将直接返回而不需要等待。2.相关函数学习与研①加载栈协议(WSAStartup):在使用WinsockAPI编写网络应
3、用程序时,要使用大量系统已经实现的网络功能函数,在调用任何一个WinsockAPI函数之前,都必须先检查协议栈的安装情况,也就是检查系统中是否有WindowsSocket的实现库。通过调用WSAStartup函数便可以检测系统中有没有一个或多个WindowsSocket的实现。这个函数是进行网络编程的过程当中首先需要调用的函数,接下来才可以进一步的调用其他的API函数。1.函数格式:intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);2.函数参数说明:•wVersionRequested:第一个参数是
4、一个双字节型数据,它指定将要在程序中要使用的Winsock版本号。一般如果要加载Winsock2.2版本,则可以通过MAKEWORD(2,2);实现。•lpWSAData:是一个指向WSADATA结构的指针,当该函数被调用的时候,它将返回关于WindowsSocket实现的详细信息。可用于相关信息的返回与查询。②创建套接口(Socket):应用程序在使用套接口进行通信之前,必须要有一个套接口。在Winsock中一般使用Socket()函数来实现一个网络应用程序的套接口。1.函数格式:SOCKETsocket(intaf,inttype,intprotocol)
5、;2.函数参数说明:•af:说明套接口要使用的协议地址族(指一系列的互联网协议),如果想建立一个UDP/TCP套接口,只能用常量AF_INET,表示使用互联网协议(IP)地址。-7-•type:描述套接口的协议类型。当第一个参数af是AF_INET的时候,他只能使用SOCK_STREAM、SOCK_DGRAM或SOCK_RAW中的任意一个。•protocol:说明该套接口使用的是特定协议。当以上两个参数确定以后,协议字段可以使用的值是限定的。如果不希望使用特定的协议,那么这一项可以设为0,系统就会根据前面的设置自动确定一个协议字段的取值。③地址绑定(bind)
6、当使用socket()函数创建了一个套接口后,该套接口是还不能直接使用的,因为他只存在于一个名字空间中,也就是说它只是确定了通信所希望使用的服务类型,并没有与该主机上提供服务的某个段口联系在一起,bind()函数通过给一个未命名的套接口分配一个本地名字莱维套接口创建本地绑定(就是把一个套接口与一个主机地址和端口号联系起来),本函数适用于数据包或者流类太接口。1.函数格式:intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);2.函数参数说明:•s:标识一个未绑定套接口的描述字,它是socket()函数调
7、用成功时返回的值。•name:是一个与指定协议有关的地址结构指针,它指向的值是赋予套接口的地址信息。在Winsock中使用sockaddr_in结构指定IP地址和端口信息,它的定义如下:structsockaddr_in{shortsin_family;u_shortsin_port;structin_addrsin_addr;charsin_zero[8]}这四个字段的含义如下:sin_family:该字段必须为AF_INET,以告诉Winsock所使用的IP地址族。sin_port:它是以网络字节顺序表示的16位端口号。sin_addr:它是以网络字节顺序
8、表示的32位IP地址。sin_zero
此文档下载收益归作者所有