欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    CH8-Java网络编程.ppt

    • 资源ID:70019425       资源大小:338.50KB        全文页数:51页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    CH8-Java网络编程.ppt

    Java网络编程网络编程 第8章8.1 引言和本章任务引言和本章任务 理解网络的基本概念;理解网络的基本概念;掌握掌握URL类、类、URLconnection类、类、InetAddress类的用法;类的用法;理解什么是流套接字,并利用理解什么是流套接字,并利用Socket类和类和ServerSocket类实现流套接字编程;类实现流套接字编程;理解什么是数据报套接字,并利用理解什么是数据报套接字,并利用Java语言语言提供的提供的UDP编程机制实现数据报套接字编程。编程机制实现数据报套接字编程。2 28.2 基础知识链接基础知识链接3 38.2.1 Java与网络与网络Java语言取得成功的领域之一就是网络语言取得成功的领域之一就是网络 (其他语言其他语言)数页代码数页代码-(Java)一条语句一条语句TCP/IP(传输控制协议传输控制协议/网间协议网间协议)是是internet的主要的主要协议协议,定义了计算机和外设进行通信所使用的规定义了计算机和外设进行通信所使用的规则则(应用层应用层,传输层传输层,网络层网络层,链路层链路层).大多数基于大多数基于internet的应用程序被看作的应用程序被看作TCP/IP协议协议的上一层的上一层.如如:ftp,http,smtp,pop3,telnet,nntp等等IP地址地址:TCP/IP网络中的每台计算机都有唯一的网络中的每台计算机都有唯一的地址地址-IP地址地址.在在Java中中,有一个用来存储有一个用来存储internet地址的类叫地址的类叫InetAddress.4 4Java与网络与网络例例:获取本机的获取本机的IP地址地址import .*;public class getLocalHostTest public static void main()InetAddress myIP=null;try myIP=InetAddress.getLocalHost();catchUnknowHostException e)System.out.println(myIP);创建创建inetAddress类不用构造函数类不用构造函数(不用不用new)5 5Java与网络与网络下面的例子演示下面的例子演示java如何根据域名自动到如何根据域名自动到DNS上查找上查找IP地址地址(与与DNS服务器的连接减至一行服务器的连接减至一行)import .*;public class getIP public static void main(String args)InetAddress pku=null;try pku=InetAddress.getByName(“”);catch(UnknowHostException e)System.out.println(pku);6 6Java与网络与网络Java提供的网络功能有三大类提供的网络功能有三大类:URL,Socket,Datagram.URL是三大功能中最高级的一种是三大功能中最高级的一种,通过通过URL Java程程序可以直接送出或读入网络上的数据序可以直接送出或读入网络上的数据.Socket是传统网络程序最常用的方式是传统网络程序最常用的方式,可以想象为可以想象为两个不同的程序通过网络的通信信道两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式是更低级的网络传输方式,它把数据的目它把数据的目的纪录在数据包中的纪录在数据包中,然后直接放在网络上然后直接放在网络上.7 78.2.2 Java基本的网络功能基本的网络功能URL类及其使用类及其使用URL连接(连接(URLconnection类)类)InetAddress类类8 8 URL类及其使用类及其使用 通过通过URL读取读取WWW服务器上的数据服务器上的数据将将URL位置的数据转成一个数据流位置的数据转成一个数据流URL url=new(http:/”DataInputStream data=new DataInputStream(url.openStream();从数据流中读出数据从数据流中读出数据String line=data.readLine()while(line!=null)line=data.readLine()9 9URL连接(连接(URLconnection类)类)3-1URL双向通信双向通信(URLConection)URLConnection是一个一是一个一http为中心的类为中心的类 1.建立连接建立连接 URL url=new URL(“http:/ con=url.openConnection();2.向服务器端送数据向服务器端送数据 PrintStream outStream=new PrintStream(con.getOutputStream();outStream.println(string_data);1010URL连接(连接(URLconnection类)类)3-23.从服务器读数据从服务器读数据 DataInputStream inStream=new DataInputStream(con.getInputStream();inStream.readLine();从从URL中得到的输出流通常与一个中得到的输出流通常与一个CGI程序程序结合一起工作结合一起工作客户端客户端java程序程序DataOutputStreamDataInputStreamCGI程序程序STDINSTDOUT服务器服务器(排序排序 sort.cgi)connectiuongetchar()putchar()1111URL连接(连接(URLconnection类)类)3-3URLConnection同时支持同时支持get和和post两种机制两种机制一般的格式一般的格式.缺省情况下位缺省情况下位post method方式方式URL和和URLConnection的区别在于前者代表一的区别在于前者代表一个资源的位置个资源的位置,后者代表一种连接后者代表一种连接1212InetAddress类类使用起来较简单,具体使用见本书介绍使用起来较简单,具体使用见本书介绍13138.2.3 Java套接字编程套接字编程 什么是套接字什么是套接字基于基于TCP的通信的通信基于基于UDP的通信的通信1414什么是套接字什么是套接字(Socket)2-1Socket是网络上运行的程序之间双向通信是网络上运行的程序之间双向通信链路的最后终结点链路的最后终结点网络服务网络服务Mailftpfinger20telnet数据结构数据结构I/O缓冲区缓冲区端口端口2123客户程序客户程序SocketIP,portIP与端口的组合得出一与端口的组合得出一个套接字个套接字,可以完全分辨可以完全分辨internet上运行的程序上运行的程序1515什么是套接字什么是套接字(Socket)2-2internet服务服务端口号端口号端口号端口号internet服务服务telnet 23 nntp 119ftp 21 www 80DNS 53 POP3 110端口号端口号:TCP/IP协议为每种服务定义了一个协议为每种服务定义了一个端口端口,当一台计算机上运行不同服务器程序当一台计算机上运行不同服务器程序时时,根据端口号不同提供相应的服务根据端口号不同提供相应的服务.端口号不是计算机上的物理连接器端口号不是计算机上的物理连接器,它只是它只是具有软件意义的假想端口具有软件意义的假想端口1616基于基于TCP的通信的通信21-1在服务器端通过指定一个用来等待的连接的在服务器端通过指定一个用来等待的连接的端口号创建一个端口号创建一个 ServerSocket实例实例.在客户端通过规定一个主机和端口号创建一在客户端通过规定一个主机和端口号创建一个个 socket实例实例,连到服务器上连到服务器上.ServerSocket类的类的accept方法使服务器处于阻方法使服务器处于阻塞状态塞状态,等待用户请求等待用户请求Socket类和类和ServerSocket是基于是基于TCP协议的协议的,TCP协议提供协议提供64个端口个端口,256以内位保留端口以内位保留端口.1717基于基于TCP的通信的通信21-2在本地机器上测试网络程序用回送地址在本地机器上测试网络程序用回送地址Socket socket=new Socket(“127.0.0.1”,2525);如果网络的一端已经关闭如果网络的一端已经关闭,另一端读到另一端读到null.建立建立socket连接后连接后,还应该建立输入输出数还应该建立输入输出数据流据流.1818基于基于TCP的通信的通信21-3ServerServerSocket(port#)Server Socket.accept()Socket()OutputStreamInputStreamClose SocketClientSocket(host,port#)Attempt the connectionOutputStreamInputStreamClose Socket1919基于基于TCP的通信的通信21-4下面的例子演示一个简单的服务器与客户的下面的例子演示一个简单的服务器与客户的交互交互,即服务器等待即服务器等待,客户访问客户访问,相互通一次相互通一次信息信息.2020基于基于TCP的通信的通信21-5.8.5 Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户读客户 端信息端信息向用户发出一个字符串向用户发出一个字符串创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(接收并显示接收并显示)送用户名给送用户名给服务器服务器关闭流关闭流waiting for user127.0.0.1 11111111login:connetcting client.java提示用户登录成功提示用户登录成功读读socket流流User:javaLogin successful2121基于基于TCP的通信的通信21-6例例:显示服务器与客户机间的通信显示服务器与客户机间的通信(服务器端服务器端)PrintStream ps=null;DataInputStream dis=null;String username;ServerSocket serverSocket=null;Socket clientSocket=null;try serverSocket=new ServerSocket(1111);catch(IOException e)System.out.println(“Error”+e);System.exit(1);try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(Accept failed.);System.exit(1);创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接2222基于基于TCP的通信的通信21-7.ps=new PrintStream(clientSocket.getOutputStream();dis=new DataInputStream(clientSocket.getInputStream();创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流向客户发出登录要求向客户发出登录要求 ps.println(login:);ps.flush();2323基于基于TCP的通信的通信21-8ps.println(login sucessful);ps.flush();System.out.println(username+has logged off);读客户读客户 端信息端信息创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流向用户发出登录要求向用户发出登录要求通知客户连接完毕通知客户连接完毕if(username=dis.readLine()=null)System.out.println(readLine returned null);System.exit(1);System.out.println(Username:+username);2424基于基于TCP的通信的通信21-9例例:显示服务器与客户机间的通信显示服务器与客户机间的通信(客户端客户端)创建创建Socket实例实例PrintStream output;DataInputStream input;String string;Socket socket=null;定义数据成员定义数据成员trysocket=new Socket(127.0.0.1,1111);catch(IOException e)System.out.println(Error”+e);return;input=new DataInputStream(socket.getInputStream();output=new PrintStream(socket.getOutputStream();建立建立socket流流2525基于基于TCP的通信的通信21-10.System.out.println(input.readLine();创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(看到提示看到提示)System.in.read(bArray);String s=new String(bArray,0);output.println(s);从键盘上读送用户从键盘上读送用户名送给服务器端名送给服务器端关闭流关闭流socket.close();input.close();output.close();System.out.println(Done);System.out.println(input.readLine();System.out.print(Logging off.);读服务器反馈读服务器反馈2626基于基于TCP的通信的通信21-11.8.5 Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户读客户 端信息端信息向用户发送字符串向用户发送字符串创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(看到提示看到提示)送用户名给送用户名给服务器服务器关闭流关闭流waiting for user127.0.0.1 11111111login:connetcting client.java提示用户登录成功提示用户登录成功读读socket流流User:javaLogin successful2727基于基于TCP的通信的通信21-12支持多客户支持多客户一种解决方案一种解决方案:一台计算机上一次启动多个服务器程序一台计算机上一次启动多个服务器程序,只只要端口号不同要端口号不同.myjavaclientAndServerTestmyserver myclient-f8.batmyserver2myclient2-f9.batServer1(1111)client(2222)Server2(2222)client(1111)Computer 12828基于基于TCP的通信的通信21-13第二种方案第二种方案:(支持多客户支持多客户)Serverclient1client2serverthreadserverthread将服务器写成多线程的将服务器写成多线程的,不同的线程为不同的客不同的线程为不同的客户服务户服务.main()只负责循环等待只负责循环等待线程负责网络连接线程负责网络连接,接收客户输入的信息接收客户输入的信息2929基于基于TCP的通信的通信21-14.客户客户1客户客户2服务器服务器线程线程()线程线程2线程线程()线程线程()3030.8.5 Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户读客户 端信息端信息提示用户输入客户名提示用户输入客户名创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(看到提示看到提示)送用户名给送用户名给服务器服务器关闭流关闭流waiting for user127.0.0.1 11111111login:connetcting client.java提示用户登录成功提示用户登录成功读读socket流流User:javaLogin successful3131基于基于TCP的通信的通信21-16public static void main(String args)ServerSocket serverSocket=null;tryserverSocket=new ServerSocket(1111);catch(Exception e)System.out.println(”Error”+e);System.exit(1);while(true)Socket clientSocket=null;System.out.println(waiting for users.);try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(accept failed:+e);new serverThread(clientSocket).start();3232基于基于TCP的通信的通信21-17class serverThread extends Thread DataInputStream input;PrintStream output;String user;Socket clientSocket;serverThread(Socket clientSocket)this.clientSocket=clientSocket;public void run()try input=new DataInputStream (clientSocket.getInputStream();output=System.out;user=input.readLine();System.out.println(user+Connected!);catch(IOException e)try while(true)String string;if(string=input.readLine()=null)break;output.println(user+string);output.flush();catch(Exception e)return;System.out.println(user+has disconnected.);try clientSocket.close();input.close();catch(Exception e)return;3333serverHello 1076Hello 1071abcWAIT GOabcWAIT GOdefdef 基于基于TCP的通信的通信21-18例例:通过服务器交换信息通过服务器交换信息(exchangebyserver)3434基于基于TCP的通信的通信21-19.服务器服务器(1111)acceptsocket客客户户IP client1线程线程客客户户IP client2线程线程服务器一端为了能接收多个客户的信息服务器一端为了能接收多个客户的信息,它的输它的输入流入流,输出流都是数组型的输出流都是数组型的.ServerSocket.accept()等待用户连接等待用户连接,一旦连接上一旦连接上,则调用服务程序则调用服务程序.服务程序的主要内容是网络的读写服务程序的主要内容是网络的读写,多客户的原多客户的原因因,网络读写的功能用多线程实现网络读写的功能用多线程实现,因此将此部分因此将此部分功能单独分离出来功能单独分离出来,构成线程类构成线程类3535基于基于TCP的通信的通信21-20client1client2serviceRequestserverServerSocketSocketgetOutputStreamgetInputStreamreader.runreader.run服务器端服务器端accept()reader.start()read_net_inputwrite_net_output()3636client()write.runwrite_net_output()read_net_input()close_server()客户端客户端writer.start()paint()socketgetLocalPort()getInputStreamgetOutputStream服务器基于基于TCP的通信的通信21-213737基于基于UDP的通信的通信9-1TCP/IP传输层由两个并列的协议传输层由两个并列的协议:TCP,UDP.一般套接字一般套接字(TCP)提供一个可靠的传输模型提供一个可靠的传输模型作为两个网络端点的字节流作为两个网络端点的字节流,有纠错能力有纠错能力.UDP没有保持的连接和数据流没有保持的连接和数据流,数据报是一数据报是一个网络上发送的独立信息个网络上发送的独立信息,它的到达它的到达,到达时到达时间间,以及内容不能得到保证以及内容不能得到保证.socketserverclientdatagramserverclient3838基于基于UDP的通信的通信9-2TCP提供高可靠性服务提供高可靠性服务,适用于一次要传输适用于一次要传输交换大量报文的情况交换大量报文的情况,信道上传递的包不需信道上传递的包不需要源地址和目的地址要源地址和目的地址UDP提供高效率服务提供高效率服务,适用于依次传输交换适用于依次传输交换少量报文的情形少量报文的情形(如数据库查询如数据库查询),每个数据每个数据包要包含目的地址和端口号包要包含目的地址和端口号.数据报文的使用以包为中心数据报文的使用以包为中心:打包打包,拆包拆包.J包支持两种不同的在网络上送数据包支持两种不同的在网络上送数据的方法的方法:一般套接字和数据报文套接字一般套接字和数据报文套接字.3939基于基于UDP的通信的通信9-3发出报文的标准步骤如下发出报文的标准步骤如下:1.定义数据成员定义数据成员 DatagramSocket socket;DatagramPacket packet;InetAddress address;(用来存放接收方的地址用来存放接收方的地址)int port;(用来存放接收方的端口号用来存放接收方的端口号)2.创建数据报文创建数据报文Socket对象对象 try socket=new DatagramSocket(1111);catch(.SocketException e)socket 绑定到一个本地的可用端口绑定到一个本地的可用端口,等待接收客等待接收客户的请求户的请求.4040基于基于UDP的通信的通信9-43.分配并填写数据缓冲区分配并填写数据缓冲区(一个字节类型的一个字节类型的数组数组)byte Buf=new byte256;存放从客户端接收的请求信息存放从客户端接收的请求信息.4.创建一个创建一个DatagramPacket packet=new DatagramPacket(buf,256);用来从用来从socket接收数据接收数据,它只有两个参数它只有两个参数 5.服务器阻塞服务器阻塞 socket.receive(packet);在客户的请求报道来之前一直等待在客户的请求报道来之前一直等待4141基于基于UDP的通信的通信9-56.从到来的包中得到地址和端口号从到来的包中得到地址和端口号 InetAddress address=packet.getAddress();int port=packet.getPort();7.将数据送入缓冲区将数据送入缓冲区 或来自文件或来自文件,或键盘输入或键盘输入8.建立报文包建立报文包,用来从用来从socket上发送信息上发送信息 packet=new DatagramPacket (buf,buf.length,address,port);9.发送数据包发送数据包 10.关闭关闭socket socket.send(packet);socket.close();4242基于基于UDP的通信的通信9-6客户端接收包的步骤如下客户端接收包的步骤如下:1.定义数据成员定义数据成员 int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;byte sendBuf=new byte256;2.建立建立socket socket=new DatagramSocket();4343基于基于UDP的通信的通信9-73.向服务器发出请求报文向服务器发出请求报文 address=InetAddress.getByName(args0);port=parseInt(args1);packet=new DatagramPacket(sendBuf,256,address,port);socket.send(packet);这个包本身带有客户端的信息这个包本身带有客户端的信息4.客户机等待应答客户机等待应答 packet=new DatagramPacket(sendBuf,256);socket.receive(packet);(如果没有到就一直等待如果没有到就一直等待,因此因此实用程序要设置时间限度实用程序要设置时间限度)4444基于基于UDP的通信的通信9-85.处理接收到的数据处理接收到的数据 String received=new String(packet.getData(),0);System.out.println(received);数据报套接字首先是强调发送方和接收方的区别数据报套接字首先是强调发送方和接收方的区别,同时也指出服务器和客户之间的不同同时也指出服务器和客户之间的不同:一个客户机必须事先知道服务器的地址和端口一个客户机必须事先知道服务器的地址和端口,以以便进行出事连接便进行出事连接一个服务器从它接收到的数据报文中读取客户端一个服务器从它接收到的数据报文中读取客户端的地址和端口的地址和端口.4545基于基于UDP的通信的通信9-9.建立数据报建立数据报socket();建立一个报文包建立一个报文包packet等待请求报文等待请求报文建立数据报建立数据报socket建立一个请求包建立一个请求包发出请求发出请求获得对方地址获得对方地址构成信息包构成信息包发送出去发送出去创建接收包创建接收包等待接收等待接收46468.3案例案例8及分析:及分析:SMTP邮件传送客户端邮件传送客户端 具体分析见书上具体分析见书上47478.4 扩展知识扩展知识48488.4.1 编写多客户服务器程序编写多客户服务器程序 实现多客户服务器,利用实现多客户服务器,利用Java的多线程机制,的多线程机制,将服务器写成多线程程序,不同的线程为不将服务器写成多线程程序,不同的线程为不同的客户服务。同的客户服务。主线程只负责循环等待,其它线程负责网络主线程只负责循环等待,其它线程负责网络连接,接收客户输入的信息。连接,接收客户输入的信息。在主线程中,利用在主线程中,利用ServerSocket.accept()等待等待用户连接,一旦客户端连接上服务器端套接用户连接,一旦客户端连接上服务器端套接字,则启动其它线程来响应客户端请求,完字,则启动其它线程来响应客户端请求,完成对客户端的服务成对客户端的服务 4949小结小结2-1实现网络功能要靠实现网络功能要靠URL类类,URLConection类类,Socket类和类和DatagramSocket类类网络上的数据传送是将网络连接转换成输入网络上的数据传送是将网络连接转换成输入输出流输出流DataInputStream和和DataOutputStream(PrintStream)是网间流的载体是网间流的载体.URL适用于适用于web应用应用,如访问如访问http服务器是高服务器是高层服务层服务URLConection的另一边通常是的另一边通常是cgi程序程序5050小结小结2-2回环地址回环地址可用于在本地机器上调试网络程序可用于在本地机器上调试网络程序Socket适用于面向连接的适用于面向连接的,可靠性要求高的可靠性要求高的应用应用Datagram适用于效率要求高的应用适用于效率要求高的应用Socket是由是由IP和端口构成的一种网上通信链和端口构成的一种网上通信链路的一端路的一端Socket通信要分别运行服务器和客户程序通信要分别运行服务器和客户程序服务器程序是多线程的服务器程序是多线程的,可处理多个客户可处理多个客户的的请求请求5151

    注意事项

    本文(CH8-Java网络编程.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开