分布式系统-Socket编程.ppt
《分布式系统-Socket编程.ppt》由会员分享,可在线阅读,更多相关《分布式系统-Socket编程.ppt(91页珍藏版)》请在三一办公上搜索。
1、1,Socket编程,参考:Java 网络编程原理与JSP Web开发核心技术马晓敏 等编著中国铁道出版社2010年3月,网络API,API:应用程序编程接口Java网络应用程序编程接口(包)Socket接口RMI:Remote Method Invocation远程方法调用UNIXBerkeley sockets&RPC(Remote Procedure call)WindowsWinsock,各种常见的应用程序编程接口,4,TCP/IP基础,5,6,7,Socket和Socket通信基础,Socket(套接字)的定义 面向客户端/服务器结构的SocketSocket最基本的函数与函数调用流
2、程,8,Socket的定义,进程标识一个主机的每一个网络进程使用协议端口进行标识,这样,要唯一确定网络环境的某个进程(计算机),就同时需要主机和端口号,在Internet网络环境中,就是同时采用IP地址和端口号来标识的。端口号只能取整数,范围是从065 535,其中01023的端口号一般固定分配给一些系统服务。,9,查看进程及其端口,10,11,12,多重协议标识,多重协议中需要指明是何种通信协议。一个通信进程的多重协议的标识就要用一个三元组:协议,本地主机网络地址,本地主机进程瑞口,进行全局唯一地标识。一个完整的网间网进程通信由两个通信进程组成,需要一个五元组来标识:协议,本地主机网络地址,
3、本地主机进程瑞口,远程主机网络地址,远程主机进程端口。,13,Socket,套接字(Socket):在Internet网络环境中,协议、IP地址和端口构成了进程间通信的一个端点,抽象为网络编程的接口对象。每个Socket有一个本地唯一的Socket号,由操作系统分配.,14,Socket接口与TCP/IP协议的关系,TCP(Transmission Control Protocol):传输控制协议。UDP(User Data Protocol):用户数据报协议。IP协议(Internet Protocol):在网络层采用的网间协议。DNS(Domain Name System):域名系统,简称
4、域名,是IP地址的字符型地址。TCP/IP(Transmission Control Protocol/Internet Protocol)协议簇:一个工业标准的协议集,简称TCP/IP协议,它是为广域网(WAN)设计的。其中IP协议和TCP协议是协议中最核心的两个协议。,15,Socket接口与TCP/IP协议,Socket是应用层与TCP/IP协议通信的中间软件抽象层,是一组接口。把复杂的TCP/IP协议隐藏在Socket接口后面,对用户来说使用非常方便,通过Socket接口应对复杂网络间通信,以符合指定的协议。,16,不同的Socket,不同的传输协议采用不同的Socket接口。(1)字
5、节流套接字(Stream Socket)(2)数据报套接字(Datagram Socket)(3)原始数据报套接字(Raw Socket)Socket的出现只是可以更方便地使用TCP/IP协议而已,与TCP/IP协议并没有必然的联系。Socket接口在设计的时候,希望也能适应其他的网络协议。,17,面向客户端/服务器结构的套接字Socket,服务器端(Server):专门处理消息、提供服务的进程。客户端(Client):发送消息、请求处理的进程。总体过程就是客户端发送一个消息给服务器端,服务器端进程收到消息进行处理,把处理结果发送给客户端。Socket正是面向客户/服务器(C/S)结构而设计的
6、,针对客户和服务器程序提供不同的Socket系统调用。客户端随机申请一个半关联Socket;服务器拥有公认的Socket,它事先开启,即“侦听”,任何客户都可以向它发出连接请求和信息请求,当服务器Socket“侦听”到客户端Socket便可实现连接和通信。对于客户端和服务器端Socket创建时关于端口号要事先进行约定,即共同操作同一个端口。,18,套接字Socket最基本的函数与函数调用流程,socket():对网络通信信道实现创建套接字bind():绑定网络地址和端口 recv()/send()或read()/write():接受信息和发送信息 sendto()和recvfrom()函数,c
7、onnect():连接远程机器 listen():监听到达的数据 accept():接收请求 closesocket():关闭套接字或连接,Socket对通信协议进行了抽象,形成了很多灵活的函数(方法)。一些最基本的函数为:,19,1面向连接的客户端/服务器结构应用系统的关键流程,依据TCP协议,使用字节流套接字接口(Stream Socket)的网络通信为面向连接的网络通信。,20,面向连接的网络通信服务系统,socket()函数调用的关键流程,21,2面向无连接的客户端/服务器结构应用系统的关键流程,基于UDP协议,使用数据报套接字接口(Datagram Socket)的网络通信为面向无连
8、接通信。面向无连接的网络通信服务系统,socket()函数调用的关键流程如图3-3所示。,22,面向无连接的socket()函数调用的关键流程,23,综上所述,Socket套接字在计算机中实现了一个通用的通信接口,可以通过这个接口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。如今,Socket接口已是TCP/IP网络协议最为通用的API,也是在Internet上进行应用开发最为通用的API。,24,Windows Socket网络编程,Windows Sockets编程概述客户端和服务器端主要函数描述,Socket分为BSD UN
9、IX Sockets和Windows Sockets,即BSD Socket和WinSock。这里仅讨论Windows Sockets编程。,25,Windows Sockets编程概述,Windows Sockets规范是一套开放的、支持多种协议,Windows下的网络编程接口。已成为Windows网络编程事实上的标准。Windows Sockets套接字编程模型的设计为服务器端和客户端结构,服务器与客户机端都必须调用Windows Sockets API函数socket()建立一个通信套接字Socket,通过套接字链接和通信。,26,客户端和服务器端主要函数描述,WindowsSocket
10、s套接字编程的主要函数分为四类,共11个。WSAStartup()和WSACleanup()函数:绑定和释放WinSock库和版本。socket()和closesocket()函数:创建和关闭Socket套接字。listen()、accept()和connect()函数:基于套接字建立监听、接收和连接函数。send()/recv()和sendto()/recvfrom()函数:发送和接收数据函数。,27,Windows Socket网络编程实例,构建编程环境TCP协议服务器和客户端编程实例UDP服务器和客户端编程实例,28,构建编程环境,在VC+中已为WinSock API网络应用开发提供了所
11、需的所有头文件和库文件,是一个方便、易用和强大的开发平台。在VC+语言中,需要配置和使用的如下几个文件,两个主要的版本:WinSock1:头文件WINSOCK.H、库文件WSOCK32.LIB WinSock2 头文件MSWSOCK.H、库文件WS2_32.LIB、MSWSOCK.LIB,以及WINSOCK.DLL、下载Microsoft Windows Server 2003 SP1 Platform SDK,安装SDK后,设置VC+开发环境。,29,TCP协议服务器和客户端编程实例,设计一个基本的网络TCP协议服务器程序有如下几个步骤:用WSAStartup()函数初始化WinSock库和
12、用WSACleanup()释放WinSock资源操作,已封装到initWinSock.h程序中的CInitWinSock类中,故创建CInitWinSock类对象即可。用socket()函数创建一个监听的Socket,如sListen。用TCP协议type参数为SOCK_STREAM。设置服务器地址信息,并将监听端口绑定到这个地址上。用listen()函数开始监听。用accept()函数接收客户端连接。用recv()/send()函数和客户端通信。用closesocket()关闭与客户端连接套接字sClient,关闭服务器监听套接字sListen,或者返回第步。,30,设计一个简单的TCP协议
13、客户端程序有以下几个步骤:同上创建CInitWinSock类对象,初始化WinSock库或释放WinSock资源。用socket()函数创建一个客户端连接Socket,如sConnect。type参数为SOCK_STREAM。填写连接服务器地址信息。用connect()函数和创建的套接字与指定地址的服务器连接。用send()/recv()函数发送和接收数据,直到TCP协议会话结束。用closesocket()关闭客户端连接套接字sConnect。(1)TCP协议服务器程序:TCPServer.h(2)TCP协议客户机程序:TCPClient.h,31,UDP服务器和客户端编程实例,设计UDP服
14、务器程序有以下几个步骤:初始化和释放WinSock资源(同上)。用socket()函数创建服务器端套接字,如sServer。使用UDP协议type参数为SOCK_DGRAM。设置本地服务器地址信息,调用bind()函数将套接字sListen与IP地址和端口绑定在一起。用recvfrom()/sendto()函数收发数据。关闭服务器套接字sListen。,32,设计UDP客户端程序有以下几个步骤:初始化和释放WinSock资源(同上)。用socket()函数创建客户端套接字,如sClient。type参数为SOCK_DGRAM。填写服务器地址信息,调用bind()函数将套接字sClient与远程
15、服务器IP地址和端口绑定在一起。用recvfrom()/sendto()函数收发数据。关闭客户端套接字sClient。(1)UDP服务器程序:UDPServer.h(2)UDP客户机程序:UDPClient.h,33,JAVA网络编程,数据流 基于TCP协议的套接字通信 基于UDP协议的数据报和套接字,34,网络通信中基于套接字输入流和输出流的创建,客户端要实现套接字的网络通信,需四个步骤:创建套接字socket(Socket),连接成功后形成网络连接通道;完成绑定套接字通信的输入流和输出流对象的创建;用输入和输出流对象调用其对应方法的操作方式实现网络通信;网络通信结束,需要关闭输入流和输出流
16、对象,尤其要关闭套接字对象。,35,基于套接字的字节输入流和输出流的创建-网络编程实例,import java.io.*;import.*;public class Client public static void main(String args)throws IOException/建立Socket,服务器在本机的8888端口处进行“侦听”Socket socket=new Socket(127.0.0.1,8888);/建立套接字(客户端套接字信息:+socket);try/套接字建立成功后,建立字节输入流dis和输出流dos对象 DataInputStream dis=new Dat
17、aInputStream(socket.getInputStream();DataOutputStream dos=new DataOutputStream(socket.getOutputStream();/调用其对应方法进行网络通信 for(int i=0;i6;i+)dos.writeUTF(客户端测试:+i);/向服务器发数据 dos.flush();/刷新输出缓冲区,以便立即发送 System.out.println(dis.readUTF();/将从服务器接收的数据输出 dos.writeUTF(end);/向服务器发送终止标志 dos.flush();/刷新输出缓冲区,以便立即发
18、送/关闭对象 dos.close();/关闭输出流对象dos dis.close();/关闭输入流对象disfinally(客户端结束);socket.close();/关闭套接字对象socket,36,基于套接字的具有缓冲的字符输入流和字符输出流的创建,import java.io.*;import.*;public class Client public static void main(String args)throws IOException/建立Socket,服务器在本机的8888端口处进行“侦听”Socket socket=new Socket(127.0.0.1,8888);/
19、建立套接字 try/套接字建立成功后,通过转换器建立字符输入流br和自动刷新输出流pw BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);,转换器,转换器,37,/调用其对应方法进行网络通信 for(int i=0;i10;i+)/向服务器发数据,并自动刷新输出缓冲区 pw.
20、println(测试:+i);String str=br.readLine();/从服务器接收数据 System.out.println(str);/将从服务器接收的数据输出/向服务器发送终止标志,并自动刷新输出缓冲区 pw.println(end);/关闭对象 pw.close();/关闭输出流对象pw br.close();/关闭输入流对象br finally(结束);socket.close();/关闭套接字对象socket,38,TCP套接字,一个套接字Socket就是在网络上运行的两个程序间的双向通信通道的一个端点,两个程序通过各自的套接字实现程序间的与网络拓扑结构无关的通信。客户端
21、程序和服务器必须使用同样的通信协议,这就是TCP协议,即它们在传送的信息所使用的语言上达成一致。在Java的包中提供了两个套接字类,如客户端程序的套接字Socket和服务器端的套接字ServerSocket,它们很好地支持了TCP套接字。套接字通信是利用IP地址和端口Port进行的,是一种基础性的底层连接。一般步骤是:首先,服务器“侦听”其端口进入的连接。其次,客户端套接字与服务器的端口连接建立套接字级别的连接通道。再次,客户端与服务器分别通过绑定和套接字连接通道的输入输出流操作,实现网络通信与服务。,39,Socket类,Socket类为客户端的通信套接字。以下三个功能:由构造函数,定义指定
22、远端IP地址、端口进行连接通信的通信套接字socket。将此socket以字节输入流和输出流的形式返回,当与数据输入流和输出流绑定,便可实现客户端的网络通信。也可通过方法获得已连接的socket的远端IP地址、端口。,1Socket定义和构造函数2返回输入流和输出流的方法3获取Socket信息方法,40,1Socket定义和构造函数,Socket构造函数均为public修饰类型,如果创建socket时发生I/O错误,均抛出IOException异常。定义和常用的构造函数如下:定义:public class Socket extends Object构造函数:Socket(InetAddress
23、 address,int port)创建一个socket并与指定的IP地址的指定的端口相连接。address为指定的IP地址。port为指定的端口。Socket(String host,int port)创建一个socket并与指定的主机的指定的端口相连接。host为指定的主机的字符串名。port为指定的端口。如果无法确定主机的IP地址还抛出UnknownHostException异常。,41,2获取输入流和输出流的方法,public InputStream getInputStream()throws IOException返回此套接字的输入流。public OutputStream get
24、OutputStream()throws IOException返回此套接字的输出流。套接字建立成功后,建立字节输入流dis和输出流dos对象:DataInputStream dis=new DataInputStream(socket.getInputStream();DataOutputStream dos=new DataOutputStream(socket.getOutputStream();,42,3获取Socket信息方法,此类方法可获取socket所连接的远端IP地址、端口号,及所绑定的本地IP地址、端口号。另外,socket用完需要用方法关闭。方法如下:public Inet
25、Address getInetAddress()获取socket所连接的远端IP地址。public InetAddress getLocalAddress()获取socket所绑定的本地IP地址。public int getPort()获取socket所连接的远端端口号。public int getLocalPort()获取socket所绑定到的本地端口号。public void close()throws IOException关闭socket。String toString()将此socket转换为String。,43,ServerSocket类,ServerSocket类为服务器的通信套
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 系统 Socket 编程
链接地址:https://www.31ppt.com/p-5929694.html