第十课《Socket编程》.ppt_第1页
第十课《Socket编程》.ppt_第2页
第十课《Socket编程》.ppt_第3页
第十课《Socket编程》.ppt_第4页
第十课《Socket编程》.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、第八课Socket编程,2007 iSoftStone Holdings Ltd. All Rights Reserved.,2,1.1 网络编程简介,网络编程 != 网站编程 MSN、QQ、联众的游戏这些是网络编程 新浪、网易、搜狐这些动态的网页、网站都是网站编程。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,3,1.1 网络编程简介,计算机网络 分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件、软件、数据信息等资源。 外部设备:HUB、交换机、

2、路由器、网线、调至解调器等 网络的主要功能 1、资源共享 2、信息传输与集中处理 3、综合信息服务(万维网、ISDN等),2007 iSoftStone Holdings Ltd. All Rights Reserved.,4,1.1 网络编程简介,网络通信协议 计算机网络中实现通信必须有一些约定即通信协议。对速率、传输代码、代码结构、传输控制步骤等制定标准。 比如人与人之间进行交流,就要按约定的语言格式来进行, 否则会造成交流的困难。 网络通信接口 为了使两点之间能进行对话,必须在它们之间建立通信工具(即接口),使它们彼此能进行信息交换。接口包括两部分 硬件装置:实现结点之间的信息传送 软件

3、装置:规定双方进行通信的约定协议。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,5,1.1 网络编程简介,分层的思想 由于结点之间关系很复杂,在制定协议时,把复杂成分分解成一些简单的成分,再将他们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层。而与再下一层不发生关系。各层互不影响。利于系统的开发和扩展。 类似于公司的组织结构:董事会、总经理、财务经理、销售经理等等。只对上层领导负责,不跃层处理问题。 参考标准: 1、国际标准化组织的开放系统互联模型 OSI 2、事实标准TCP/IP,2007 iSoftSt

4、one Holdings Ltd. All Rights Reserved.,6,1.1 网络编程简介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,7,1.1 网络编程简介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,8,1.1 网络编程简介,类似于邮寄信件 把写好的信用信封包好,装到快递袋里。再装到大的邮寄包裹里。然后送到指定地方,打开包裹,打开快递袋,撕开信纸。最后看到传过来的数据 信。,2007 iSoftStone Holdings Ltd. All Rights Res

5、erved.,9,1.1 网络编程简介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,10,1.1 网络编程简介,IP协议 它是网络层的协议。支持网络间互联的数据报通信。为我们的每台设备提供了一个唯一的IP地址。 TCP协议 是专门设计用于在因特网上提供可靠的、端到端的字节流通信的协议。是一种面向连接的协议。 连接的双方都确认连接后,才会开始发送数据。所以称是可靠的。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,11,1.1 socket 简介,一般的网络编程都叫Socket编程。

6、JAVA也如此 包括Windows网络编程,unixs网络编程等都叫socket编程。 两个JAVA应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. Socket通常用来实现ClientServer连接。 J包中定义的两个类Socket和ServerSocket分别用来实现双向连接的Client和Server端。 建立连接时所需的寻址信息为远程计算机的ip地址和端口号(Port number),2007 iSoftStone Holdings Ltd. All Rights Reserved.,12,1.1 socket 简介,端口号为了区别一台机子上

7、运行的不同应用程序。一个端口号被一个程序占用后,其他程序就无法在使用了。但一个程序可以占用多个端口。(我们自己的程序使用1024以上的端口) 80:http21: ftp 110:pop3 25:smtp Socket套接字是网络通信的一个重要机制, java采用的Socket通信是一种流式套接字通信,它使用TCP协议,通过面向连接服务,实现客户机与服务器之间的双向且可靠的通信。系统包提供了ServerSocket类和Socket类,分别用于客户端(Client)和服务器端(Server)。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,

8、13,1.2 Socket通信机制,1. Socket通信的步骤 使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,14,1.2 Socket通信机制,对于一个功能齐全的Socket,都要

9、包含以下基本结构,其工作过程包含以下四个基本的步骤:(1) 创建Socket;(2) 打开连接到Socket的输入/出流;(3) 按照一定的协议对Socket进行读/写操作;(4) 关闭Socket. 在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,15,Socket类和ServerSocket类 包中提供了两个类: Socket类和ServerSocket类,分别用于客户端和服务

10、器端的通信 ,网络通信的方法都封装在这两个类中。构造方法包括: ServerSocket(int port) /在指定的端口上创建服务器Socket对象 ServerSocket(int port,int count) /在指定的端口上创建服务器Socket对象,并指定服务器能够支持的最大连接数,2007 iSoftStone Holdings Ltd. All Rights Reserved.,16, Socket(InetAddress IP,int port) /使用指定IP地址和端口建立Socket对象 Socket(String host,int port) /使用指定主机和端口建立

11、Socket对象 Socket(InetAddress IP,int port,boolean stream) /使用指定IP地址和端口建立Socket对象,布尔值stream表示是否采用流式通信方式 实例: D:TestSocket下的test1,test2,test3,2007 iSoftStone Holdings Ltd. All Rights Reserved.,17,2007 iSoftStone Holdings Ltd. All Rights Reserved.,18,下面是一个典型的创建客户端Socket的过程。trySocket socket=new Socket(127.

12、0.0.1,4700); /是TCP/IP协议中默认的本机地址catch(IOException e)System.out.println(Error:+e);这是最简单的在客户端创建一个Socket的一个小程序段,也是使用Socket进行网络通讯的第一步,程序相当简单,在这里不作过多解释了。在后面的程序中会用到该小程序段。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,19,下面是一个典型的创建Server端ServerSocket的过程。ServerSocket server=null;try server=new

13、ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求catch(IOException e)System.out.println(“can not listen to :”+e);Socket socket=null;try socket=server.accept(); /accept()是一个阻塞的方法,,2007 iSoftStone Holdings Ltd. All Rights Reserved.,20,一旦有客户请求,它就会返回一个Socket对象用于同客户进行交互catch(IOException e)System.out.pri

14、ntln(Error:+e);以上的程序是Server的典型工作模式,只不过在这里Server只能接收一个请求,接受完后Server就退出了。实际的应用中总是让它不停的循环接收,一旦有客户请求,Server总是会创建一个服务线程来服务新来的客户,而自己继续监听。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,21,程序中accept()是一个阻塞函数,所谓阻塞性方法就是说该方法被调用后,将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,然后accept()返回一个对应于客户的socket。这时,客户方和服务方都建立了用于通信的s

15、ocket,接下来就是由各个socket分别打开各自的输入/输出流。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,22,类Socket提供了方法getInputStream ()和getOutStream()来得到对应的输入/输出流以进行读/写操作,这两个方法分别返回InputStream和OutputSteam类对象。为了便于读/写数据,我们可以在返回的输入/输出流对象上建立过滤流,如DataInputStream、DataOutputStream或PrintStream类对象,对于文本方式流对象,可以采用InputStreamRea

16、der和OutputStreamWriter、PrintWirter等处理。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,23,例如: PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream(); DataInputStream is=new DataInputStream(socket.getInputStream(); PrintWriter out=new PrintWriter(socket.getOutStream(),tru

17、e); BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream();,2007 iSoftStone Holdings Ltd. All Rights Reserved.,24,输入输出流是网络编程的实质性部分,具体如何构造所需要的过滤流,要根据需要而定,能否运用自如主要看读者对Java中输入输出部分掌握如何,2007 iSoftStone Holdings Ltd. All Rights Reserved.,25,每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕

18、时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。os.close();is.close();socket.close();,2007 iSoftStone Holdings Ltd. All Rights Reserved.,26,尽管Java有自动回收机制,网络资源最终是会被释放的。但是为了有效的利用资源,建议读者按照合理的顺序主动释放资源。,2007 iSoftStone Hold

19、ings Ltd. All Rights Reserved.,27,1. 客户端程序import java.io.*;import .*;public class TalkClient public static void main(String args) try Socket socket=new Socket(,4700); /向本机的4700端口发出客户请求 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造BufferedReader对象PrintW

20、riter os=new PrintWriter(socket.getOutputStream();/由Socket对象得到输出流,并构造PrintWriter对象,2007 iSoftStone Holdings Ltd. All Rights Reserved.,28,PrintWriter os=new PrintWriter(socket.getOutputStream();/由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInput

21、Stream(); /由Socket对象得到输入流,并构造相应的BufferedReader对象,2007 iSoftStone Holdings Ltd. All Rights Reserved.,29,String readline;readline=sin.readLine(); /从系统标准输入读入一字符串while(!readline.equals(bye) /若从标准输入读入的字符串为 bye则停止循环os.println(readline); /将从系统标准输入读入的字符串输出到Serveros.flush(); /刷新输出流,使Server马上收到该字符串System.out.

22、println(Client:+readline); /在系统标准输出上打印读入的字符串System.out.println(Server:+is.readLine(); /从Server读入一字符串,并打印到标准输出上readline=sin.readLine(); /从系统标准输入读入一字符串 /继续循环os.close(); /关闭Socket输出流is.close(); /关闭Socket输入流socket.close(); /关闭Socketcatch(Exception e) System.out.println(Error+e); /出错,则打印出错信息,2007 iSoftSt

23、one Holdings Ltd. All Rights Reserved.,30,os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socketcatch(Exception e) System.out.println(Error+e); /出错,则打印出错信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,31,2. 服务器端程序 import java.io.*;import .*;import java.applet.Applet;public

24、 class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求catch(Exception e) System.out.println(can not listen to:+e); /出错,打印出错信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客户请求,有客户/请求到来则产生一个So

25、cket对象,并继续执行catch(Exception e) System.out.println(Error.+e); /出错,打印出错信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,32,2. 服务器端程序 import java.io.*;import .*;import java.applet.Applet;public class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSo

26、cket(4700); /创建一个ServerSocket在端口4700监听客户请求catch(Exception e) System.out.println(can not listen to:+e); /出错,打印出错信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客户请求,有客户/请求到来则产生一个Socket对象,并继续执行catch(Exception e) System.out.println(Error.+e); /出错,打印出错信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,33,String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInput

温馨提示

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

评论

0/150

提交评论