03第三章 Socket网络编程_第1页
03第三章 Socket网络编程_第2页
03第三章 Socket网络编程_第3页
03第三章 Socket网络编程_第4页
03第三章 Socket网络编程_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 Socket网络编程作者:肖明学校:烟台大学计算机学院日期:2010年2月第三章第三章 Socket与网络编程与网络编程 本章主要讨论本章主要讨论Socket概念、与概念、与TCP/IP协议关系、协议关系、Socket通信,及通信,及WindowsSockets编程和实例。编程和实例。v3.1 套接字套接字Socket和和Socket通信基础通信基础v3.2 Windows Sockets网络编程网络编程v3.3 Windows Socket网络编程实例网络编程实例3.1 套接字套接字Socket和和Socket通信基础通信基础套接字可以方便地实现对网络通信的各种操作。套接字可以方便地

2、实现对网络通信的各种操作。 v3.1.1 套接字套接字Socket的定义的定义v3.1.2 面向客户端面向客户端/服务器结构的套接字服务器结构的套接字Socketv3.1.3 套接字套接字Socket最基本的函数与函数调用流程最基本的函数与函数调用流程3.1.1 套接字套接字Socket的定义的定义v1进程标识进程标识一个主机的每一个网络进程使用协议端口进行标一个主机的每一个网络进程使用协议端口进行标识,这样,要唯一确定网络环境的某个进程(计识,这样,要唯一确定网络环境的某个进程(计算机),就同时需要主机和端口号,在算机),就同时需要主机和端口号,在Internet网络环境中,就是同时采用网络

3、环境中,就是同时采用IP地址和端口号来标地址和端口号来标识的。识的。端口号只能取整数,范围是从端口号只能取整数,范围是从065 535,其中,其中01023的端口号一般固定分配给一些服务。的端口号一般固定分配给一些服务。 2多重协议标识多重协议标识v多重协议中需要指明是何种通信协议。多重协议中需要指明是何种通信协议。 v一个通信进程的多重协议的标识就要用一个一个通信进程的多重协议的标识就要用一个三元组:三元组:协议,本地主机网络地址,本地主协议,本地主机网络地址,本地主机进程瑞口机进程瑞口,进行全局唯一地标识。,进行全局唯一地标识。v一个完整的网间网进程通信由两个通信进程一个完整的网间网进程通

4、信由两个通信进程组成,需要一个五元组来标识:组成,需要一个五元组来标识:协议,本地协议,本地主机网络地址,本地主机进程瑞口,远程主主机网络地址,本地主机进程瑞口,远程主机网络地址,远程主机进程端口机网络地址,远程主机进程端口。Socket套接字套接字 vSocket套接字:套接字:在在Internet网络环境中,协议、网络环境中,协议、IP地址和端口构成了进程间通信的一个端点,抽象为地址和端口构成了进程间通信的一个端点,抽象为网络编程的接口对象。网络编程的接口对象。v连接(连接(Cennection) :两个进程之间的通信连路。两个进程之间的通信连路。v关联(关联(Association) :

5、一对套接字完全确定了构一对套接字完全确定了构成一个连接的两个进程。成一个连接的两个进程。 v半关联(半关联(Half-Association) :一个套接字制定一一个套接字制定一个连接的一半。个连接的一半。vSocket套接字又可称为套接字又可称为“捆绑捆绑”了协议、了协议、IP地址和地址和端口的一个通信链的句柄。端口的一个通信链的句柄。 关联描述关联描述v在网间网内部,每一个在网间网内部,每一个Socket用一个半关联用一个半关联描述为:描述为:协议,本地地址,本地瑞口协议,本地地址,本地瑞口;v一对完整的一对完整的Socket接口构成的一个连接,用接口构成的一个连接,用一个关联描述为:一个

6、关联描述为:协议,本地地址,本地瑞协议,本地地址,本地瑞口,远程地址,远程端口口,远程地址,远程端口。v每一个每一个Socket有一个本地唯一的有一个本地唯一的Socket号,号,由操作系统分配。由操作系统分配。3Socket接口与接口与TCP/IP协议的关系协议的关系vTCP(Transmission Control Protocol):):传输控制协议。传输控制协议。vUDP(User Data Protocol ):):用户数据报协议。用户数据报协议。vIP协议(协议(Internet Protocol):):在网络层采用的网间协议。在网络层采用的网间协议。vDNS(Domain Nam

7、e System):):域名系统,简称域名,是域名系统,简称域名,是IP地址的字符型地址。地址的字符型地址。vTCP/IP(Transmission Control Protocol/Internet Protocol)协议簇:)协议簇:一个工业标准的协议集,简称一个工业标准的协议集,简称TCP/IP协议,它是为广域网(协议,它是为广域网(WAN)设计的。其中设计的。其中IP协议和协议和TCP协议是协议中最核心的两个协议。协议是协议中最核心的两个协议。 图图3-1 Socket接口与接口与TCP/IP协议协议vSocket是应用层与是应用层与TCP/IP协议通信的中间软件抽象层,它是一协议通信

8、的中间软件抽象层,它是一组接口。组接口。 v把复杂的把复杂的TCP/IP协议隐藏在协议隐藏在Socket接口后面,对用户来说使用接口后面,对用户来说使用非常方便,通过非常方便,通过Socket接口应对复杂网络间通信,以符合指定接口应对复杂网络间通信,以符合指定的协议。的协议。不同的不同的Socketv不同的传输协议采用不同的不同的传输协议采用不同的Socket接口。接口。v(1)字节流套接字()字节流套接字(Stream Socket)v(2)数据报套接字()数据报套接字(Datagram Socket)v(3)原始数据报套接字()原始数据报套接字(Raw Socket) Socket的出现只

9、是可以更方便地使用的出现只是可以更方便地使用TCP/IP协议而已,与协议而已,与TCP/IP协议并没有必然的联系。协议并没有必然的联系。Socket接口在设计的时候,希望也能适应其接口在设计的时候,希望也能适应其他的网络协议。他的网络协议。3.1.2 面向客户端面向客户端/服务器结构的服务器结构的套接字套接字Socketv服务器端(服务器端(Server):专门处理消息、提供服务的进程。):专门处理消息、提供服务的进程。v客户端(客户端(Client):发送消息、请求处理的进程。):发送消息、请求处理的进程。v总体过程就是客户端发送一个消息给服务器端,服务器端进总体过程就是客户端发送一个消息给

10、服务器端,服务器端进程收到消息进行处理,把处理结果发送给客户端。程收到消息进行处理,把处理结果发送给客户端。vSocket正是面向客户正是面向客户/服务器(服务器(C/S)结构而设计的,针对)结构而设计的,针对客户和服务器程序提供不同的客户和服务器程序提供不同的Socket系统调用。系统调用。v客户端随机申请一个半关联客户端随机申请一个半关联Socket;服务器拥有公认的;服务器拥有公认的Socket,它事先开启,即,它事先开启,即“侦听侦听”,任何客户都可以向它,任何客户都可以向它发出连接请求和信息请求,当服务器发出连接请求和信息请求,当服务器Socket“侦听侦听”到客户到客户端端Sock

11、et便可实现连接和通信。便可实现连接和通信。 v对于客户端和服务器端对于客户端和服务器端Socket创建时关于端口号要事先进创建时关于端口号要事先进行约定,即共同操作同一个端口。行约定,即共同操作同一个端口。 3.1.3 套接字套接字Socket最基本的最基本的函数与函数调用流程函数与函数调用流程vsocket():对网络通信信道实现创建套接字:对网络通信信道实现创建套接字vbind():绑定网络地址和端口:绑定网络地址和端口 vrecv()/send()或或read()/write():接受信息和发送信息:接受信息和发送信息 vsendto()和和recvfrom()函数函数vconnect

12、():连接远程机器:连接远程机器 vlisten():监听到达的数据:监听到达的数据 vaccept():接收请求:接收请求 vclosesocket():关闭套接字或连接:关闭套接字或连接 Socket对通信协议进行了抽象,形成了很多灵活的函数对通信协议进行了抽象,形成了很多灵活的函数(方法)(方法) 。一些最基本的函数为:。一些最基本的函数为:1面向连接的客户端面向连接的客户端/服务器结构应服务器结构应用系统的关键流程用系统的关键流程v依据依据TCP协议,使用字节流套接字接口协议,使用字节流套接字接口(Stream Socket)的网络通信为面向连接)的网络通信为面向连接的网络通信。的网络

13、通信。图图3-2 面向连接的面向连接的socket()函数调用关键流程函数调用关键流程面向连接的网络通信服务系统,面向连接的网络通信服务系统,socket()函数调用的关键流程如图函数调用的关键流程如图3-2所示。所示。2面向无连接的客户端面向无连接的客户端/服务器结构服务器结构应用系统的关键流程应用系统的关键流程v基于基于UDP协议,使用数据报套接字接口协议,使用数据报套接字接口(Datagram Socket)的网络通信为面向无)的网络通信为面向无连接通信。连接通信。 v面向无连接的网络通信服务系统,面向无连接的网络通信服务系统,socket()函数调用的关键流程如图函数调用的关键流程如图

14、3-3所示。所示。 图图3-3 面向无连接的面向无连接的socket()函数调用关键流程函数调用关键流程 v综上所述,综上所述,Socket套接字在计算机中实现了套接字在计算机中实现了一个通用的通信接口,可以通过这个接口与一个通用的通信接口,可以通过这个接口与任何一个具有任何一个具有Socket接口的计算机通信。应接口的计算机通信。应用程序在网络上传输,接收的信息都通过这用程序在网络上传输,接收的信息都通过这个个Socket接口来实现。如今,接口来实现。如今,Socket接口已接口已是是TCP/IP网络协议最为通用的网络协议最为通用的API,也是在,也是在Internet上进行应用开发最为通用

15、的上进行应用开发最为通用的API。3.2 Windows Socket网络编程网络编程v3.2.1 Windows Sockets编程概述编程概述v3.2.2 客户端和服务器端主要函数描述客户端和服务器端主要函数描述vSocket分为分为BSD UNIX Sockets和和Windows Sockets,即,即BSD Socket和和WinSock。这里仅讨。这里仅讨论论Windows Sockets编程。编程。 vSocket套接字就像使用文件句柄一样,可以对套接字就像使用文件句柄一样,可以对Socket句柄进行各种操作,从而方便地实现网络句柄进行各种操作,从而方便地实现网络编程。编程。 3

16、.2.1 Windows Sockets编程概述编程概述vWindows Sockets规范是一套开放的、支持多种规范是一套开放的、支持多种协议,协议,Windows下的网络编程接口。已成为下的网络编程接口。已成为Windows网络编程事实上的标准。网络编程事实上的标准。vWindowsSockets套接字编程模型的设计为服务器套接字编程模型的设计为服务器端和客户端结构,服务器与客户机端都必须调用端和客户端结构,服务器与客户机端都必须调用Windows Sockets API函数函数socket()建立一个通信建立一个通信套接字套接字Socket,通过套接字链接和通信。整个通信,通过套接字链接

17、和通信。整个通信过程和具体函数流程框图如图过程和具体函数流程框图如图3-2和图和图3-3所示。所示。 3.2.2 客户端和服务器端客户端和服务器端主要函数描述主要函数描述vWindowsSockets套接字编程的主要函数分为四类,套接字编程的主要函数分为四类,共共11个。个。 v WSAStartup()和和WSACleanup()函数:绑定和函数:绑定和释放释放WinSock库和版本。库和版本。v socket()和和closesocket()函数:创建和关闭函数:创建和关闭Socket套接字。套接字。v listen()、accept()和和connect()函数:基于套接函数:基于套接字

18、建立监听、接收和连接函数。字建立监听、接收和连接函数。v send()/recv()和和sendto()/recvfrom()函数:发送函数:发送和接收数据函数。和接收数据函数。v具体语法见教材。具体语法见教材。3.3 Windows Socket网络编程实例网络编程实例v3.3.1 构建编程环境构建编程环境v3.3.2 TCP协议服务器和客户端编程实例协议服务器和客户端编程实例v3.3.3 UDP服务器和客户端编程实例服务器和客户端编程实例3.3.1 构建编程环境构建编程环境v在在VC+中已为中已为WinSock API网络应用开发提供了网络应用开发提供了所需的所有头文件和库文件,是一个方便

19、、易用和所需的所有头文件和库文件,是一个方便、易用和强大的开发平台。在强大的开发平台。在VC+语言中,需要配置和使语言中,需要配置和使用的如下几个文件,两个主要的版本用的如下几个文件,两个主要的版本 :vWinSock1:头文件头文件WINSOCK.H 、库文件、库文件WSOCK32.LIB vWinSock2 头文件头文件MSWSOCK.H、库文件、库文件WS2_32.LIB、MSWSOCK.LIB,以及,以及WINSOCK.DLL、 v下载下载Microsoft Windows Server 2003 SP1 Platform SDK,安装,安装SDK后,设置后,设置VC+开发环境。开发环

20、境。 3.3.2 TCP协议服务器和客户端协议服务器和客户端编程实例编程实例设计一个基本的网络设计一个基本的网络TCP协议服务器程序有如下几个步骤:协议服务器程序有如下几个步骤:v 用用WSAStartup()函数初始化函数初始化WinSock库和用库和用WSACleanup()释放释放WinSock资源操作,已封装到资源操作,已封装到initWinSock.h程序中的程序中的CInitWinSock类中,故创建类中,故创建CInitWinSock类对象即可。类对象即可。v 用用socket()函数创建一个监听的函数创建一个监听的Socket,如,如sListen。用。用TCP协议协议type

21、参数为参数为SOCK_STREAM。v 设置服务器地址信息,并将监听端口绑定到这个地址上。设置服务器地址信息,并将监听端口绑定到这个地址上。v 用用listen()函数开始监听。函数开始监听。v 用用accept()函数接收客户端连接。函数接收客户端连接。v 用用recv()/send()函数和客户端通信。函数和客户端通信。v 用用closesocket()关闭与客户端连接套接字关闭与客户端连接套接字sClient,关闭服,关闭服务器监听套接字务器监听套接字sListen,或者返回第,或者返回第步。步。v设计一个简单的设计一个简单的TCP协议客户端程序有以下几个步骤:协议客户端程序有以下几个步

22、骤:v 同上创建同上创建CInitWinSock类对象,初始化类对象,初始化WinSock库或释库或释放放WinSock资源。资源。v 用用socket()函数创建一个客户端连接函数创建一个客户端连接Socket,如,如sConnect。type参数为参数为SOCK_STREAM。v 填写连接服务器地址信息。填写连接服务器地址信息。v 用用connect()函数和创建的套接字与指定地址的服务器连函数和创建的套接字与指定地址的服务器连接。接。v 用用send()/recv()函数发送和接收数据,直到函数发送和接收数据,直到TCP协议会话协议会话结束。结束。v 用用closesocket()关闭客户端连接套接字关闭客户端连接套接字sConnect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论