欢迎来到天天文库
浏览记录
ID:22609255
大小:57.50 KB
页数:11页
时间:2018-10-30
《vc++网络编程之基础篇》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、WindowsSocketsAPI简介VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,WindowsSocketsAPI是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的BerkeleySocket接口(套接字)。在桌面操作系统进入Windows时代后,仍然继承了Socket方法。在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O
2、,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。Socket存在于一个“通信域”(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。Socket有三类。第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,比如telnet,http。第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,比如
3、UDP。第三种是SOCK_RAW(原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。二、WindowsSocket机制分析2.1一些基本的Socket系统调用 主要的系统调用包括:socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;closesocket()-关闭Socket。2.2Windo
4、wsSocket的启动与终止 启动函数WSAStartup()建立与WindowsSocketsDLL的连接,终止函数WSAClearup()终止使用该DLL,这两个函数必须成对使用。2.3异步选择机制 Windows是一个非抢占式的操作系统,而不采取UNIX的阻塞机制。当一个通信事件产生时,操作系统要根据设置选择是否对该事件加以处理,WSAAsyncSelect()函数就是用来选择系统所要处理的相应事件。当Socket收到设定的网络事件中的一个时,会给程序窗口一个消息,这个消息里会指定产生网络事件的Socket,发生的事
5、件类型和错误码。2.4异步数据传输机制 WSAAsyncSelect()设定了Socket上的须响应通信事件后,每发生一个这样的事件就会产生一个WM_SOCKET消息传给窗口。而在窗口的回调函数中就应该添加相应的数据传输处理代码。三、WinSock基本定义:WinSock是MicrosoftWindowsSocket的简称,WinSock为软件开发人员提供一套Windows操作系统上的开放的、支持多种协议的网络编程接口,已成为在TCP/IP网络编程和Internet应用开发中通用的解决方案。WinSock对一些重要的数据类型
6、和结构做了如下定义。1、套接字的定义typedefunsignedintu_int; typedefu_intSocket;2、基本数据类型的定义typedefunsignedcharu_char;typedefunsignedshortu_short;typedefunsignedintu_int;typedefunsignedlongu_long;3、网络地址的数据结构网络地址用无符号长整数unsignedlong表示。例如IP地址127.0.0.1可以表示为:#defineINADDR_LOOPBACK0x7f00
7、0001用inet_addr()函数可以将分16位IP地址转换为unsignedlong类型,其定义为:unsignedlonginet_addr(constcharFAR*cp)Cp为点分16位IP地址,如“192.1.8.84”。4、套接字地址结构sockaddr结构——通用Socket地址结构,其定义为:structsockaddr{u_shortsa_family;charsa_data[14];};其中sa_family为网络地址类型,随协议的不同而不同,一般为AF_INET,表示该socket在Internet域中
8、通信。sockaddr_in结构——专门针对Internet域的Socket地址结构,其定义为:structsockaddr_in{ shortsin_family; u_shortsin_port; structin_addrsin_addr; cha
此文档下载收益归作者所有