欢迎来到天天文库
浏览记录
ID:43217108
大小:309.00 KB
页数:21页
时间:2019-10-03
《计算机网络与通信(第13章)new》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第13章基于Socket的网络通信13.1概述13.2套接字Socket13.3基于Socket的网络通信程序设计13.1概述TCP/IP通信协议的核心部分是TCP、UDP和IP,在操作系统的内核中实现,称为TCP/IP网络操作系统。应用程序通过应用程序编程接口API(ApplicationProgrammingInterface),实现访问操作系统内核。Socket是TCP/IPNOS环境下网络通信应用程序编程接口,提供了通过对系统内核进行调用来实现应用程序之间通信的一种机制。可以把套接字看成是网络环境下UNIX文件访问方法的一般化。套接字继承了UNI
2、X文件读写的思路,应用程序在进行网络读写时请求操作系统创建一个套接字,系统返回一个Socket描述字,提供通信的端口。13.1概述Socket网络通信API13.2套接字Socket套接字的使用也和文件访问类似,一旦应用程序创建了一个套接字,并进行了地址绑定和外部地址的TCP连接,就可以利用套接字描述字作为参数使用write()在此连接上发送数据流,在连接的另一端则使用read()接收数据。UNIX的套接字提供了一系列的系统调用函数,它们都是围绕着应用程序如何利用网络通信协议在网上进行数据交换而设计的。通过这些函数的调用,应用程序就可以在掩盖通信协议细节
3、的情况下,实现网络传输。套接字是面向C/S模式而设计的,对客户和服务器程序提供不同的Socket系统调用。13.3基于Socket的网络通信程序设计13.3.1Socket的创建与关闭13.3.2绑定本地地址13.3.3建立连接13.3.4数据发送与接受13.3.5基于Socket的网络通信程序实现框架13.3.1Socket的创建与关闭创建Socket:sockid=socket(pf,type,protocol)sockid是系统调用socket()的返回值,即Socket描述字。socket()的三个参数:①pf(protocolfamily)②t
4、ype③protocol关闭套接字:close(sockid)其中,sockid是被关闭的Socket描述字。13.3.1Socket的创建与关闭socket()系统调用的三个参数的组合协议族Socket类型实际协议PF_INETSOCK_DGRAMUDPSOCK_STREAMTCPSOCK_RAWIPv4SOCK_RAWICMPvPF_INET6SOCK_DGRAMUDPSOCK_STREAMTCPSOCK_RAWIPv6SOCK_RAWICMPv613.3.2绑定本地地址bind()将本地Socket地址与所创建的Socket号绑定起来,Socket
5、地址:主机IP地址和端口号。bind(sockid,localaddr,addrlen)①sockid②localaddr③addrlen地址长度bind()成功返回0,失败返回-1。网络字节序:采用大端字节序(big-endian),一个字的高位字节先存,存于机器的存储器中的低地址,而低位字节存于高地址。13.3.3建立连接请求连接请求连接是客户端的动作。调用connect()函数请求套接字与服务器已命名的被动套接字的连接。connect(sockid,destaddr,addrlen)①sockid②destaddr③addrlen连接失败,conn
6、ect()返回-1。13.3.3建立连接接收连接接收连接是服务器端的动作,服务程序必须在调用bind()绑定地址之后执行两个步骤:一是创建一个存储连接请求的侦听队列,这使得套接字能够听取多个连接请求,系统调用listen()用于建立侦听队列;二是接收连接。系统调用accept()用于接收套接字上到达的连接请求。13.3.3建立连接(1)listen()listen(sockid,quelen)①sockid②quelenlisten()函数成功时返回0,失败时返回-1。(2)accept()newsock=accept(sockid,clientaddr
7、,paddrlen)①sockid②clientaddr③paddrlen13.3.3建立连接accept()调用后:将返回连接请求方的Socket地址及其长度并将它们分别放入clientaddr所指结构和paddrlen所指单元。给调用者返回一个新的Socket号(下图中为newsock),新Socket号与请求的客户建立了连接,而原来的Socket(下图中为initsock)仍保持打开状态,用来继续接收新的连接请求。13.3.3建立连接accept()调用返回前后的状态13.3.3建立连接并发服务器:调用fork(),产生一个从服务器(子进程)。13
8、.3.3建立连接重复服务器:不用fork()产生从服务器。主服务器自己用新套接字
此文档下载收益归作者所有