欢迎来到天天文库
浏览记录
ID:33527122
大小:2.07 MB
页数:86页
时间:2018-05-25
《java语言ppt教学课件-第九讲-java网络编程基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
第九讲网络通信1、网络基本概念2、Java与Internet3、使用InetAddress4、使用URL5、Socket通信6、数据报通信 TCP/IP(TransmissionControlProtocol传输控制协议/InternetProtocol网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则。TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。ISO/OSI网络参考模型则包括七个层次:应用层、表示层、会话层、传输层、网络层、链路层、物理层。1、网络基本概念物理层 大多数基于Internet的应用程序被看作TCP/IP网络的最上层——应用层,如:ftp,http,smtp,pop3,telnet,nntp等。网络层对TCP/IP网络中的硬件资源进行标识。连接到TCP/IP网络中的每台计算机(或其他设备)都有唯一的地址,这就是IP地址。IP地址实质上是一个32位的整数,通常以“%d.%d.%d.%d”的形式表示,每个d是一个8位整数。在TCP/IP网络中,不同的机器之间进行通信时,数据的传输是由传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等。TCP/IP网络中最常用的传输协议就是TCP(TransportControlProtocol)和UDP(UserDatagramProtocol)。1、网络基本概念 一台机器通常只通过一条链路连接到网络上,即它只有一个IP地址,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是TCP和UDP的基础。网络服务httpftp其他服务21telnet端口2380客户程序SocketIP,portIP与端口号组合而得出的Socket,可以完全分辨Internet上运行的程序。1、网络基本概念 端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留,专门给那些通用的服务(well-knownservices),如http服务的端口号为80,telnet服务的端口号为23,ftp服务的端口为21,…因此,当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。1、网络基本概念 传输层通常以TCP和UDP协议来控制端点到端点的通信。用于通信的端点是由Socket来定义的,Socket是由IP地址和端口号组成的。传输控制协议(TCP)是在端点与端点之间建立持续的连接而进行通信。建立连接后,发送端将发送的数据印记了序列号和错误检测代码,并以字节流的方式发送出去;接收端则对数据进行错误检查并按序列顺序将数据整理好,数据在需要时可以重新发送,因此整个字节流到达接收端时完好无缺。这与两个人打电话的情形是相似的。TCP协议具有可靠性和有序性,并且以字节流的方式发送数据,它通常被称为流通信协议。1、网络基本概念 与TCP协议不同,用户数据报协议(UDP)则是一种无连接的传输协议。利用UDP协议进行数据传输时,首先需要将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的端点(Socket,主机地址和端口号),然后再将数据报发送出去。这种传输方式是无序的,也不能确保绝对的安全可靠,但它很简单也具有比较高的效率,这与通过邮局发送邮件的情形非常相似。1、网络基本概念 1、网络基本概念 TCP协议和UDP协议各有各的用处。当对所传输的数据具有时序性和可靠性等要求时,应使用TCP协议;当传输的数据比较简单、对时序等无要求时,UDP协议能发挥更好的作用,如ping、发送时间数据等。1、网络基本概念 2、Java与Internet——Java中的网络支持针对网络通信的不同层次,Java提供的网络功能有四大类:InetAddress、URLs、Sockets、Datagram。InetAddress面向的是网络层(IP层),用于标识网络上的硬件资源。URL面向的应用层,通过URL,Java程序可以直接送出或读入网络上的数据。Sockets和Datagram面向的则是传输层。Sockets使用的是TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。Datagram则使用UDP协议,是另一种网络传输方式,它把数据的目的地纪录在数据包中,然后直接放在网络上。 2、Java与Internet——Java中的网络支持java.net包中的主要的类和可能产生的例外包括:面向IP层的类:InetAddress(Inet4Address,Inet6Address)面向应用层的类:URL、URLConnection面向网络层的类:TCP协议相关类:Socket、ServerSocketUDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket可能产生的例外:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException 类InetAddress可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。InetAddress类没有构造函数,因此不能用new来构造一个InetAddress实例。通常是用它提供的静态方法来获取:publicstaticInetAddressgetByName(Stringhost):host可以是一个机器名,也可以是一个形如“%d.%d.%d.%d”的IP地址或一个DSN域名。publicstaticInetAddressgetLocalHost()publicstaticInetAddress[]getAllByName(Stringhost)publicstaticInetAddressgetByAddress(Stringhost,Byte[]addr)这些方法通常会产生UnknownHostException例外,应在程序中捕获处理。以下是InetAddress类的几个主要方法,通过上述方法获得InetAddress类的实例后就可以使用:publicbyte[]getAddress():获得本对象的IP地址(存放在字节数组中)。publicStringgetHostAddress():获得本对象的IP地址“%d.%d.%d.%d”。publicStringgetHostName():获得本对象的机器名。3、使用InetAddress 下面的例子演示Java如何根据域名自动到DNS(域名服务器)上查找IP地址(与DNS服务器的连接减至一行):publicclassgetIP{publicstaticvoidmain(Stringargs[]){try{InetAddressad=InetAddress.getByName("www.263.net");//InetAddressad=InetAddress.getLocalHost();System.out.println(ad);}catch(UnknownHostExceptione){System.out.println(e.toString());}}}3、使用InetAddress 通过InetAddress,可以获取本机的IP地址:publicclassGetHostName{publicstaticvoidmain(Stringargs[]){try{InetAddressad=InetAddress.getByName(“127.0.0.1");//InetAddressad=InetAddress.getLocalHost();System.out.println(“主机名:”+ad.getHostName());}catch(UnknownHostExceptione){System.out.println(e.toString());}}}3、使用InetAddress 4、使用URLURL是统一资源定位符(UniformResourceLocator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图象文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等)。通过URL,就可以访问Internet。浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源。 4、使用URL一个URL包括两部分内容:协议名称和资源名称,中间用冒号隔开:Protocol:resourceName如:http://www.bjfu.edu.cn协议名称指的是获取资源时所使用的应用层协议,如http,ftp,file等;资源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个应用。当然,并不是所有的URL都必须包含这些内容。http://www.bjfu.edu.cnhttp://www.bjfu.edu.cn/javaCourse/index.htmlftp://www.bjfu.edu.cn/javaCourse/Techdoc/ch1.ppthttp://www.abc.com:8080/java/network.html#UDP 4、使用URL——在Java中构造URL在java.net包中,提供了类URL来表示URL。类URL提供了很多构造方法来生成一个URL对象:publicURL(String spec)publicURL(URLcontext,Stringspec)publicURL(String protocol,String host,String file)publicURL(String protocol,String host,int port,String file)以下是一些具体的构造实例:URLurl1=newURL(“http://www.bjfu.edu.cn/map/index.html”);URLbase=newURL(“http://www.bjfu.edu.cn”);URLurl2=newURL(base,“mywork1.html”);URLurl3=newURL(base,“mywork2.html”);URLurl4=newURL(“http”,“www.bjfu.edu.cn”,“/abc/test.html”);URLurl5=newURL(“http”,“www.abc.com”,8080,“/java/network.html”);另外还有两种稍微复杂些的构造方法(参见JDK文档)。 当创建URL时发生错误,系统会产生例外MalformedURLException,这是非运行时例外,必须在程序中捕获处理。URLurl1,url2,url3;try{url1=newURL(“file:/D:/image/example.gif”);url2=newURL(“http://www.bjfu.edu.cn/map/”);url3=newURL(url2,“test.gif”);}catch(MalformedURLExceptione){DisplayErrorMessage();}4、使用URL——在Java中构造URL 一个URL对象生成后,其属性是不能被改变的(与String对象相似),但可以通过它给定的方法来获取这些属性:publicStringgetProtocol():获取该URL的协议名publicStringgetHost():获取该URL的主机名publicStringgetPort():获取该URL的端口号publicStringgetPath():获取该URL的文件路径publicStringgetFile():获取该URL的文件名publicStringgetRef():获取该URL在文件中的相对位置publicStringgetQuery():获取该URL的查询名4、使用URL——URL的基本方法ParseURL.java 4、使用URL——URL连接通过URL类提供的方法openConnection(),就可以获得一个URL连接(URLConnection)对象。publicURLConnectionopenConnection()通过URL的方法openStream(),只能从网络上读取资源中的数据。通过URLConnection类,可以在应用程序和URL资源之间进行交互,既可以从URL中读取数据,也可以向URL中发送数据。URLConnection类表示了应用程序和URL资源之间的通信连接。try{URLurl=newURL(“http://www.bjfu.edu.cn”);URLConnectionuc=url.openConnection();}catch(MalformedURLExceptione1){…}catch(IOExceptione2){…} 4、使用URL——URL连接importjava.net.*;importjava.io.*;publicclassReadURLFile{publicstaticvoidmain(Stringargs[])throwsIOException{//URLurl=newURL("http://www.263.net/");URLurl=newURL("http://www.bjfu.edu.cn/english/index.jsp");URLConnectionconnect=url.openConnection();BufferedReaderbuf=newBufferedReader(newInputStreamReader(connect.getInputStream()));BufferedWriterfile=newBufferedWriter(newFileWriter("1.txt"));Stringline;while((line=buf.readLine())!=null){System.out.println(line);file.write(line);file.newLine();}buf.close();file.close();}}URLConnection中最常用的两个方法是:publicInputStreamgetInputStream()publicOutputStreamgetOutputStream() 通过URLConnection对象获取的输入流和输出流(不是所有的资源都可以获得有效的输出流),可以与现有的CGI程序进行交互。URL和URLConnection的区别在于前者代表一个资源的位置,后者代表一种连接。4、使用URL——URL连接OutputStreamInputStream服务器connectionURLurl=newURL("http://www.bjfu.edu.cn/english/index.jsp");URLConnectionconnect=url.openConnection();BufferedReaderbuf=newBufferedReader(newInputStreamReader(connect.getInputStream()));InputStreamReaderInputStreamBufferedReader数据 浏览器实例功能:一个简单的网页浏览器实现超级链接事件技术:基于JEditorPane显示网页内容 importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;importjava.io.*;importjava.net.*;publicclassMyBrowserextendsJFrame{JLabeljLabel;JTextFieldtf;JEditorPanecontent;publicMyBrowser(){//界面设计代码}//显示网页代码(略)//事件处理代码(略)publicstaticvoidmain(Stringargs[]){MyBrowsermb=newMyBrowser();}} super("我的浏览器");Containercon=getContentPane();//创建标签和文本框对象,并将他们添加到面板中,面板添加到程序窗口的北面jLabel=newJLabel("输入连接的网址");tf=newJTextField("");tf.addActionListener(newMyFieldDealing());JPanelpanel=newJPanel();panel.setLayout(newGridLayout(2,1));panel.add(jLabel);panel.add(tf);con.add(panel,BorderLayout.NORTH);content=newJEditorPane();//创建一个JEditorPane对象用来显示网页内容content.setEditable(false);//设置可编辑为false,以响应超链接事件content.addHyperlinkListener(newMyHyperListener());//对content增加超链接监听con.add(newJScrollPane(content),BorderLayout.CENTER);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,300);setVisible(true);界面设计代码 //自定义方法,用来显示指定网址的网页内容voidgetThePage(Stringsite){try{content.setPage(site);//设置参数网址site的内容显示在content中}catch(IOExceptionex){JOptionPane.showMessageDialog(this,"连接错误","错误提示",JOptionPane.ERROR_MESSAGE);}}显示网页内容的代码 classMyFieldDealingimplementsActionListener{//处理文本框回车事件publicvoidactionPerformed(ActionEvente){Stringstr=tf.getText();getThePage(str);//调用自定义方法显示网页内容}}classMyHyperListenerimplementsHyperlinkListener{//处理超链接事件publicvoidhyperlinkUpdate(HyperlinkEvente){if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED){Stringstr=e.getURL().toString();//得到超链接事件的网页getThePage(str);//显示超链接指向的网页}}}事件处理代码 问题:对html、CSS支持不好,页面布局错位等。 实现Java网页浏览器的其他方法使用开源桌面组件JDIC(JDesktopIntegrationComponents)网址:http://jdic.dev.java.net/参考代码见下页: importjava.awt.BorderLayout;importjava.awt.event.*;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.swing.*;importorg.jdesktop.jdic.browser.IWebBrowser;importorg.jdesktop.jdic.browser.WebBrowser;importorg.jdesktop.jdic.browser.WebBrowserEvent;importorg.jdesktop.jdic.browser.WebBrowserListenerAdapter;publicclassTest1extendsJPanelimplementsActionListener{ privateJTextFieldinput; privateJButtongo; privateIWebBrowserweb; publicTest1(){ super(newBorderLayout()); initWindow(); } privatevoidinitWindow(){ try{ web=newWebBrowser(); web.addWebBrowserListener(newMyListener()); go=newJButton("转到"); input=newJTextField(); JPanelup=newJPanel(newBorderLayout()); up.add(input,BorderLayout.CENTER); up.add(go,BorderLayout.EAST); this.add(up,BorderLayout.NORTH); this.add(web.asComponent(),BorderLayout.CENTER); input.addActionListener(this); go.addActionListener(this); }catch(Exceptionex){ Logger.getLogger(Test1.class.getName()).log(Level.SEVERE,null,ex); } JFramejf=newJFrame("JAVA浏览器"); jf.add(this,BorderLayout.CENTER); jf.setSize(500,300); jf.setLocationRelativeTo(null); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }publicvoidactionPerformed(ActionEventae){ doOpen(); }privatevoiddoOpen(){ try{ Stringtext=input.getText(); if(text==null||text.equals("")){ return; } if(!text.toLowerCase().startsWith("http://")){ text="http://"+text; } web.setURL(newURL(text)); }catch(MalformedURLExceptionex){ Logger.getLogger(Test1.class.getName()).log(Level.SEVERE,null,ex); } } publicstaticvoidmain(String[]args){ newTest1(); } privateclassMyListenerextendsWebBrowserListenerAdapter{ privateMyListener(){} @Override publicvoiddocumentCompleted(WebBrowserEventarg0){ System.out.println("文档下载完。。。"); web.executeScript("alert('文档下载完毕!')"); //web.setContent("
此文档下载收益归作者所有
举报原因
联系方式
详细说明
内容无法转码请点击此处