赞
踩
IBM 公司于94年4月推出的TCP/IP for DOS V2.1.1提供的开发软件包Programmer's Tool Kit不仅带有DOS下网络编程接口,而且提供了Windows下网络异步通信接口WINSOCK。
Socket是BSD UNIX提供的网络应用编程接口,它采用客户-服务器的通讯机制,使网络客户方和服务器方通过Socket实现网络之间的连接和数据交换。Socket提供了一系列的系统调用,使用这些系统调用可以实现TCP, UDP,ICMP和IP等多种网络协议之间的通讯。
Socket有三种主要类型:stream sockets, datagram sockets 和raw sockets 。 Stream socket接口定义了一种可靠的面向连接的服务,它实现了无差错无重复的顺序数据传输。它通过内置的流量控制解决了数据的拥塞,应用程序可以发送任意长度的数据,将数据当作字节流。Datagram socket接口定义了一种无连接的服务,数据通过相互独立的包进行传输,包的传输是无序的,并且不保证是否出错、丢失和重复。包长度是有限的(隐含长度为8,192字节,最大长度可设为32,768字节)。Raw socket接口允许对低层协议如IP和ICMP的直接存取,它主要用于新的网络协议实现的测试等。
图2-1 面向连接的协议实现的Socket调用
从图2-1中我们可以看出,客户和服务器的关系不是对称的,服务器首先启动,然后在某一时间启动客户与服务器建立连接。服务器和客户开始都必须用调用socket()建立一个套接字(socket),然后服务器调用bind()将套接字与一个本地网络地址捆扎在一起,再用调用listen()使套接字处于一种被动的准备接收状态,同时规定它的请求队列长度,之后服务器就可以调用accept()来接收连接了。客户在建立套接字之后,便可以通过调用connect()和服务器建立连接。连接建立后,客户和服务器之间就可以通过连接发送和接收数据(调用read()和write())。最后,待数据传送结束,双方调用close()关闭套接字[7]。
WINSOCK对Socket的扩充。WINSOCK对BSD Socket的扩充主要是在基于消息、对网络事件的异步存取接口上。BSD Socket支持阻塞(blocking)和非阻塞(non_blocking)两种工作方式。在阻塞方式下工作,connect()、accept()、read()和recv()等调用在执行时都处于阻塞状态直到它成功或出错返回。在非阻塞方式下工作,这些调用是立即返回的,但是它们是否完成得靠查询才能知道。对于Windows这种非抢先多任务操作系统来说,这两种工作方式都是很难以接受的,为此,WINSOCK在尽量与BSD Socket保持一致外,又对它作了必要的扩充。90年代初,由M
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。