欢迎来到天天文库
浏览记录
ID:6135888
大小:286.50 KB
页数:73页
时间:2017-11-15
《基于tcp/ip协议的网络编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章 基于TCP/IP协议的网络编程3.1概述Windows下网络编程的规范-WindowsSockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。从1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为Windows网络编程的事实上的标准。WindowsSockets规范以U.C.Berkeley大学BSDUNIX中流行的Socket接口为范例定义了一套MicosoftWindows下网络编程接口。它不仅包含了人们所熟悉的Berk
2、eleySocket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,WindowsSockets也定义了一个二进制接口(ABI),以此来保证应用WindowsSocketsAPI的应用程序能够在任何网络软件供应商的符合WindowsSockets协议的实现上工作。3.2基本概念(1)套接字一个套接字是通信的一个端点,一个正在使用的套接字都有他的类型和相关的
3、进程.可以认为套接字是一种句柄,比如打开一个文件时就返回一个句柄,它代表了文件当前的状态,而套接字比起文件句柄来说复杂得多.套接字可以分为两种:会话套接字和数据报套接字.(2)带外数据又叫TCP紧急数据,它是相连的每一对套接字间一个逻辑上独立的传输通道.带外数据是独立于普通数据传送给用户的,这就要求带外数据设备必须支持每一时刻至少一个带外数据被可靠地传送.(3)广播数据报套接字可以向网络发送广播数据,要实现这种功能,网络必须支持广播功能.TCP/IP协议支持一个标记地址INADDR_BROADCAST用于广播.由于使用广播之前必须绑定一个数据报套接字,所以收到的广播消息都带
4、有发送者的地址和端口.(4)字节顺序不同的计算机使用不同的字节顺序存储数据.Intel处理器使用的字节顺序叫,而Internet网络的字节顺序称为,它们的字节顺序是相反的.所以用户在很多情况下要在主机字节顺序和网络字节顺序之间进行转换,应该使用WinsockAPI标准函数来转换.htonl():将主机字节变为网络字节.htons():将网络字节变为主机字节.(5)原始套接字原始套接字是用SOCK_RAW打开的套接字.使用原始套接字可以访问位于基层的网络协议(IP,ICMP,IGMP),而普通套接字只能访问传输层TCP和UDP协议.(6)阻塞和非阻塞套接字可以处于阻塞和非阻塞
5、模式,在阻塞模式下,I/O操作完成前,执行操作的函数会一直等待下去,不会立即返回(将控制权还给程序),这就意味着任一个线程在某时刻只能执行一个I/O操作,而且应用程序很难同时通过多个连接好的套接字进行通信;而非阻塞模式无论如何都会交出程序的控制权.在默认情况下,套接字是阻塞模式.3.3会话通信会话通信的步骤和模型见图3.6,并请先阅读例3.3,等会进行详细解释.建立套接字Socket()绑定套接字Bind()侦听Listen()准备接收Accept()阻塞,等待建立连接发送或接收数据关闭Closesocket()建立套接字Socket()建立连接Connect()接收或发送
6、数据关闭Closesocket()数据传送客户服务器3.6.1winsock编程流程(1)套接字的创建和关闭使用套接字之前必须调用socket()函数创建一个套接字对象.SOCKETsocket(intaf,//用来指定使用的地址格式,winsock中只支持AF_INETinttype,//用来指定套接字的类型,可使用三种//SOCKET_STREAM流套接字,SOCKET_DGRAM//数据报套接字,SOCK_RAW原始套接字intprotocol//配合type参数使用,用来指定使用的协议类型);当不使用socket创建的套接字时,应该使用closesocket函数将它
7、关闭.Intclosesocket(SOCKETs);//函数唯一的参数就是要关闭的套接字的句柄(2)绑定套接字到指定的IP地址和端口号为套接字关联本地地址的函数是bind,bind函数用在没有建立连接的套接字上面,它的作用是绑定面向连接的或无连接的套接字.Intbind(SOCKETs,//套接字句柄conststructsockaddr*name,//要关联的本地地址intnamelen//地址的长度);(3)设定套接字进入监听状态Listen函数设置套接字进入监听状态,listen仅应用在支持连接的套接字上,
此文档下载收益归作者所有