欢迎来到天天文库
浏览记录
ID:41010963
大小:27.22 KB
页数:9页
时间:2019-08-13
《如何应用TCP IP 的套接字开发网络通信应用程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、如何应用TCP/IP的套接字开发网络通信应用程序进入九十年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器网络模式,即客户机提出任务请求,通过网络发送给服务器,由服务器做相应处理,执行被请求的任务,然后将结果返回给客户机。例如:银行ATM的前置机和数据处理的主机之间即构成客户机/服务器网络模式;电话银行的前置机和银行数据处理机之间也构成这种网络模式结构等。这样,如何在前置机和数据主机之间进行信息交换,即进程网络通信,就成为实现这种网络模式的基础。而TCP/IP的套接字技术是解这一问题的有力工具。它从提出时就一直发挥着愈来愈重要的作用,并已成为UNIX操
2、作系统下TCP/IP网络编程标准;甚至WINDOW、JAVA都配有它的通用接口。有了这个强有力的工具,我们可以实现异种机、异种操作系统应用程序间的相互连接和通信。套接字(sockets)是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。它构成了在单个主机内及整个网际间的编程界面。一般来说,跨机应用进程之间要在网络环境下进行通信,必须要在网络的每一端都要建立一个套接字,两个套接字之间是可以建立连接的,也是可以无连接的,并通过对套接字的“读”、“写”操作实现网络通信功能。类似于UNIX系统中的I/O概念,像文件那样有打开、读、写、关闭的方式。
3、根据传输数据类型的不同,套按字可分为面向连接的数据套接字(streamsockets)和无连接的数据报套接字(datagramsockets)两种类型。1、字节流套接字字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,即传输控制协议(TransmitionControlProtocol)。它是一个提供给用户进程可靠的全双工的面向连接的协议,大多数INTERNET应用程序如ftp、telnet使用TCP协议。通信端点使用TCP对应的INTERNET地址互相连接,可保证按正确的顺序以及单一和可靠的地址传输数据。由于它是字节流,所以包长包没有限制,信包传输也不重复,因而是一种常用的套接
4、字类型。2、数据报套接字数据报对应记录型数据流,在TCP/IP协议簇中对应UDP协议,即用户数据报协议(UserDatagramProtocol)。利用数据报服务可实现一些简单的网络服务,如网点检测程序PING。由于不建立连接,数据报协议比连接协议快。但不能保证所有数据都准确有序地到达目的地。不保证顺序性、可靠性和无重复性。它是无连接的服务,以独立的信包进行传输,通信端点使用UDP对应的INTERNET地址。双方不需互连,按固定的最大长度进行传输,因而适用于单个报文传输,或较小文件的传输。套接字的编程要点及和过程不论何种套接字编程,均采用客户机/服务器方式,其运作过程基本类似,限于篇幅,
5、这里仅介绍字节流套接字。字节流套按字的服务进程和客户进程,在通信前必须创建各自的套接字以建立连接,然后对相应的套接字进行“读”、“写”操作,实现信息的交换。服务器进程创建套接字。服务进程总是先于客户进程启动,服务进程首先调用socket()函数创建自已端的一个字节流套接字,并提供三个参数:网络地址类型,一般取AF_INEF(AdressfamilyInterNET);套接字类型,这里取SOCK_STREAM;网络协议,缺省为TCP/IP协议,对应参数为0。给套接字地址变量赋初值。在生成套接字后,要用服务器的地址先对sockaddr_in结构变量赋初值。Sockaddr_in在/usr/i
6、nclude/netinet/in.h中有定义,它只适用于INTERNET地址类型,含有INTERNET套接字地址类型、IP端口号、IP地址等信息。地址类型可取定为AF_INET,IP地址对服务器可取任意合法地址INADDR_ANY。IP端口号可由用户设定,但要注意主机字节顺序向网络字节顺序的转换。给套接字命名。由socket()函数创建的套接字是没有名字的。所谓命名,就是用bind()函数将服务器地址捆绑到创建的套接字上。服务器进程准备接受来自客户机的连接请求。首先调用listen()函数,让服务器进程进入监听状态;然后调用accept()函数,准备接受客户机的连接信号。无连接请求时,
7、服务进程被阻塞。客户进程调用socket()函数创建已端的套接字。给客户端的sockaddr_in结构体变量赋值。地址类型仍可取AF_INET,端口号和服务器方的端口号相同,欲连服务器的地址通过调用inet_addr()转换得到。也可通过gethostbyname()函数将名字转换为指向hostent结构变量的指针,再将hostent结构变量的地址成员用bcopy()复制到sockaddr_in结构变量上。客户方调用connect(
此文档下载收益归作者所有