标题 | Socket在数字图书馆中的应用 |
范文 | 刘钟涛 申 康 关键词:Socket;数字图书馆;代理服务器 摘 要:数字图书馆的实现以网络编程为基础,Socket是TCP/IP协议的接口,服务器和客户端利用Socket建立了多个数据传输通道,提出了TCP/IP协议下Socket并发通信的过程和方法,从而实现数据的并发传输。中图分类号:G250.76文献标识码:A 文章编号:1003-1588(2009)04-0079-03 1 Socket的概念 TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。 TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族,TCP/IP为网络的应用服务互联和共享提供了有效的手段,Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。应用程序通常通过“套接字”向网络发出请求或者应答网络请求,Internet网络的编程必须使用Socket接口。是通信的基石,是支持TCP/IP网络通讯协议的基本操作单元,所谓Socket通常也称作“套接字”,可以将套接字看作不同主机间进程进行双向通信的端点,它构成了整个网络的编程界面(如图1)。 ![]() 从用户的角度来看套接字是通信端点的抽象概念,它为用户提供了发送和接受数据的机制,Socket用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。其中应用程序告诉Socket执行什么任务,Socket将这些命令翻译成TCP/IP协议的通信语言,再通过和TCP/IP进行交流,最后由TCP/IP协议将其传送到网络进行网络通信。 2 数字图书馆通信原理 作为网络上公认的通信标准,TCP/IP协议成为网络编程实现网络通信的重要组成部分。首先在服务器与客户端之间定义TCP通信协议,并创建Socket套接字,利用该套接字建议一套可靠的、基于面向连接的通信接口,客户端和服务器在该连接上传输数据,客户端发送请求,服务器监听来自客户的请求,并作出响应服务。 Socket接口是TCP/IP网络的API,Socket接口定义了许多的函数和例程。目前,网络上绝大多数的通信采用的都是服务器/客户端(Server/Client)机制,一般情况下,在服务器端,当有一个客户端连接请求到来时,服务器与客户端建立连接,然后服务器端一个进程专门处理与客户端的通信,子进程为客户提供服务,主进程继续监听其他的客户进程。服务器掌握每个客户的Socket,并能够分辨来自不同客户机的数据,它根据Socket分别对不同的客户机做出不同的响应。从而对多个客户端并发进行通信。服务器/客户端利用Socket数据传输流程(如图2)。 ![]() 3 数字图书馆通信原理 3.1 数字图书馆实现函数 3.1.1 Socket()函数 Int socket(int domain, int type, int protocol)。Socket()用来建立一个Socket数据结构分配存储空间,通知系统建立一通信端口。参数domain指定使用何种的地址类型,目前仅支持PF_INET(TCP/IP协议族)格式。 3.1.2 Bind()函数 Int bind(int sockfd, struct sockaddr my_addr, int addrlen)。Bind()用来设置给参数sockfd的socket一个名称。此名称由参数my_addr指向包含有本机IP地址和端口号等信息的指针,当创建了一个Socket以后,套接字数据结构中有一个默认的IP地址和默认的端口号。一个服务程序必须调用bind函数将Socket与本机IP地址和一个特定端口相关联,随后可以在该端口监听服务请求。 3.1.3 Listen()函数 Int listen(int s, int backlog)。Listen()用来等待参数s的socket连线。参数backlog指定服务器端同时能处理的最大客户端连接要求,如果连接数目达此上限则,client端将收到ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置socket为listen模式,真正接收客户端连线的是accept()。 3.1.4 Recv()/ Send()函数 Int recv( SOCKET s,char FAR buf,int len,int flags)。Int send( SOCKET s,const char FAR buf,int len,int flags )。不论是客户还是服务器应用程序,都用recv/Send函数从TCP连接的另一端接收/发送数据。第一个参数指定接收端套接字描述符;第二个参数指明一个缓冲区,该缓冲区用来存放Recv/Send函数接收/发送到的数据;第三个参数指明buf缓冲区的长度。 3.1.5 Connect()函数 Int connect(int sockfd, struct sockaddr serv_addr,int addrlen)。Sockfd是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;Connect函数启动和远程主机的直接连接,Socket执行体选择一个未被占用的端口,并通知你的程序数据什么时候到达打断口。 3.1.6 Closesocket()函数 Closesocket(SOCKET sockid)。在完成数据传输任务后,需要调用Closesocket()来关闭连接和释放Socket结束本次通话。 3.2 SOCKET实现数字图书馆服务器端通信步骤 (1)声明一个套接字类型的变量,需要在该变量定义中服务器IP地址和通信端口并指明协议类型。 (2)服务器端通过端口监听进入等待客户端连接的状态。 (3)如果收到连接,则从对方连接请求中获取对方的IP地址和通信端口,并向对方发送连接成功的应答信号,服务完成后,终止该进程与客户的通信链路。 (4)端口继续监听服务请求,等待另一用户。 3.3 在客户端利用基于TCP/IP和SOCKET通信步骤 (1)声明一个套接字类型的变量,需要在该变量定义中提供客户端IP地址和通信端口并指明协议类型。 (2)向远程服务器发出连接请求,SOCKET数据结构提供了一个网络连接的五中信息,分别是通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。 (3)如果连接成功,会收到对方的应答信号,以后的通信就可以通过通信通道进行请求,结束后关闭通道并终止连接。 参考文献: [1] 顾韵华,周淑琴等.DELPHI实用教程[M].北京:电子工业出版社,2003. [2] Andrew S.Tanenbaum,熊桂喜译.计算机网络[M].北京:清华大学出版社,1998. [3] 周天明,汪文勇.TCP/IP网络原理与技术[M].北京:清华大学出版社,1998. [4] 何进.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究,2001,(8). [5] 雷斌、杨建华.Visual C++6.0网络编程技术[M].北京:人民邮电出版社,2000. [6] 谢希仁.计算机网络[M].北京:清华大学出版社,1999. [7] 黄超.Windows网络编程[M].北京:人民邮电出版社,2003. [8] 黄建华等.Delphi程序设计[M].北京:清华大学出版社,2002. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。