第十三章 网络编程.ppt_第1页
第十三章 网络编程.ppt_第2页
第十三章 网络编程.ppt_第3页
第十三章 网络编程.ppt_第4页
第十三章 网络编程.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第十一章 Java 和网络 Java 可与网络连接,为使Java applets和 applications能访问在另一个系统上的文件,用户可以使用在包中的类,这些类为简单的网络操作提供抽象交叉平台。 为创建与保持连接网络上的其他系统,该类使用基本的sockets和普通的Web协议。 使用 类连同输入和输出流,可使得读写网络上的文件就象读写本地磁盘一样容易。 15 . 1 使用URL,一、基本概念 IP地址:由32位二进制数组成,它唯一地标志了Internet 上的计算机。 URL:标志了计算机上的资源。 URL 包含了IP地址。 二、在applet内创建连接 在一个applet内,实现网络连

2、接的方法是告诉浏览器装入一个新页的applet。为与一个新页连接,可创建类URL的一个对象。 用下列方法之一创建URL对象:,(1)URL(String, String, int, String) 创建一个新的URL对象,给定一个协议(HTTP,FTP,Gopher,file);一个主机名;一个端口号以及文件名和路径名。 (2)URL(String,String,String) 创建一个新的URL对象,给定一个协议(HTTP,FTP,Gopher,file);一个主机名以及文件名和路径名。 (3)URL (URL String) 创建一个新的URL对象,给定一个基路径和一个相关的路径。对于基路

3、径,可使用GetDocumentBase()来返回当前HTML文件的,URL,或者使用GetCodeBase()来返回java applet类文件的URL。 (4)URL (String) 创建一个来自URL字符串的URL对象(其应包括协议、主机名称、任选的端口名称以及文件名)。这种形式必须捕获一个畸形的URL异常。 String url=” try theURL=new URL(url); ,catch (MalformedURLException e) System.out.println(“BadURL:”+ theURL); 一旦标识了一个URL,就需要把它传递给浏览器: getApp

4、letContext().showDocument(theURL); getAppletContext()返回applet运行的文档环境, showDocument(theURL) 是用定位在该URL的 Web页代替当前观察的Web页。,P294/例子3 import java.awt .*; import java.applet .* ; import .* ; import java.awt.event.*; public class ConnectApplet extends Applet implements ActionListener Button button; URL url;

5、 TextField text; boolean badURL;,public void init() text=new TextField (18); button=new Button (“确定); add(new Label (“输入网址:”); add(text); add(button); button.addActionListener(this); public void actionPerformed(ActionEvent e) ,if (e.getSource()=button) try url=new URL(text.getText().trim(); catch (M

6、alformedURLException g) text.setText(“不正确的URL:”+url); getAppletContext().showDocument(url); ,三、同一页面中的多个Applet之间相互通讯: 相互通讯编程原则: 在本Applet程序中先利用getAppletContext()获取当前的浏览器环境对象,它返回一个AppletContext对象,然后再调用getApplet()获取对方Applet程序对象。不过这是以满足如下安全条件为前提的: 所有Applet位于同一服务器的同一目录;所有Applet运行在同一页面且位于同一浏览器窗口内。,编程方法: L文

7、档中利用多个(Applet)标签来内嵌各个Applet程序并采用name属性来命名各个Applet程序ID。 要点:使用codebase指定Applet所在的目录,当*.html文件与待加载的Applet类文件不在同一子目录时,可通过codebase项来指定Applet类文件名所在的目录(.DIRMyApplet)或URL地址。 在Applet程序内借助于getApplet()获取对应Applet程序,然后通过调用对方Applet程序中public型成员。 public void actionPerformed (ActonEvent event) Applet appletPrgOne=ge

8、tAppletContext().getApplet(“AppletOne”); (MyAppletOne) AppletPrgOne) . heFun() ; 注意:必须将返回的Applet对象制为本派生类对象,15 . 2 套接字Socket 一、什么是socket? Socket是网络上运行的程序之间双向通信链路的最 后终结点,IP与端口的组合得出一个套接字,可以完全分辨internet上运行的程序,端口号:TCP/IP协议为每种服务定义了一个端口,当 一台计算机上运行不同服务器程序时,根据端口号不 同提供相应的服务。 它标志正在计算机上运行的进程。 端口号不是计算机上的物理连接器,只是

9、具有软件意 义的假想端口。 它是一个16位的整数(065535),其中01023被预先 定义的服务通信占用了。,端口号和IP地址组合得出网络套接字Socket。 二、在客户端通过规定一个主机和端口号创建一个 Socket实例,连接到服务器上。 Socket的构造方法: Socket (String host, int port) 例如: try Socket mysocket=new Socket( “ ”,1880); catch (IOException e) ,三、在服务器端通过指定一个用来等待连接的 端口号创建一个 ServerSocket 实例。 ServerSocket的构造方法是

10、: ServerSocket(int port) port是端口号,必须和客户呼叫的端口号相同。 例如: try ServerSocket server_socket=new ServerSocket(1880); catch (IOException e) ,当服务器的套接字连接server_socket建立后,用accept()方法接收客户的套接字mysocket。 即:ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求。 例如: try Socket sc= server_socket.accept(); catch (IOException e) Socke

11、t类和ServerSocket是基于TCP协议的,TCP协议提供64个端口。,建立socket连接后,还应该建立输入输出数据流。 双方通信完成后应关闭套接字连接:sc.close();,四、示例 下面的例子演示一个简单的服务器与客户的交互,即服务器等待,客户访问,相互通一次信息。 参考教材P296/例子4,. 8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (接收并显示),送用户名给 服务器,关闭流,waiting for user

12、, 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User :java,Login successful,PrintStream ps=null; DataInputStream dis=null; String username; ServerSocket serverSocket=null; Socket clientSocket=null;,try serverSocket=new ServerSocket(1111); catch (IOException e) System.out.print

13、ln( “Error”+e); System.exit(1);,try clientSocket=serverSocket.accept(); catch (IOException e) System.out.println(Accept failed.);System.exit(1);,创建服务器(端口号),定义数据成员,服务器等待 网络连接,ps=new PrintStream(clientSocket.getOutputStream(); dis=new DataInputStream(clientSocket.getInputStream();,建立socket流,向客户发出登录要求,

14、ps.println(login:); ps.flush();,ps.println(login sucessful); ps.flush(); System.out.println(username+ has logged off);,读客户 端信息,通知客户连接完毕,if (username=dis.readLine()=null) System.out.println(readLine returned null); System.exit(1); System.out.println(Username:+username);,例:显示服务器与客户机间的通信(客户端),创建Socket实

15、例,PrintStream output; DataInputStream input; String string; Socket socket=null;,定义数据成员,trysocket=new Socket(,1111); catch(IOException e) System.out.println(Error ”+e); return;,input=new DataInputStream(socket.getInputStream(); output=new PrintStream(socket.getOutputStream();,建立socket流,Syste

16、m.out.println(input.readLine();,读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.);,读服务器反馈,支持多客户 第一

17、种解决方案: 一台计算机上一次启动多个服务器程序,只要端 口号不同。 myjavaclientAndServerTest myserver1myclient1-f8.bat myserver2myclient2-f9.bat,第二种方案: (支持多客户),Server,client1,client2,serverthread,serverthread,将服务器写成多线程的,不同的线程为不同的客户服务。 main()只负责循环等待线程负责网络连接,接收客户输入的信息,客户1,客户2,服务器,线程(),线程2,public static void main(String args) ServerS

18、ocket serverSocket=null; try serverSocket=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 fai

19、led:+e); new serverThread(clientSocket).start(); ,class 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.getInputStr

20、eam(); /接收来自服务器的信息,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 disconn

21、ected.); try clientSocket.close(); input.close(); catch(Exception e) return; ,15 . 3 UDP数据报 TCP/IP传输层由两个并列的协议:TCP,UDP。 一般套接字(TCP)提供一个可靠的传输模型作为 两个网络端点的字节流,有纠错能力。 UDP没有保持的连接和数据流,数据报是一个 网络上发送的独立信息,它的到达、到达时间 以及内容不能得到保证。,socket,TCP提供高可靠性服务,适用于一次要传输交换大量报文的情况,信道上传递的包不需要源地址和目的地址。 UDP提供高效率服务,适用于依次传输交换少量报文的情形

22、 (如数据库查询),每个数据包要包含目的地址和端口号。 数据报文的使用以包为中心:打包发往目的地;接收包,然后拆包。 J包支持两种不同的在网络上送数据的方法:一般套接字和数据报文套接字。,发出数据包步骤: 1. 定义数据成员 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用来存放接收方地址) int port; (用来存放接收方的端口号) 2. 创建数据报文Socket对象 try socket=new DatagramSocket(1111); catch(.SocketException e) sock

23、et 绑定到一个本地的可用端口,等待接收客户的请求。,3.分配并填写数据缓冲区(一个字节类型的数 组) byte Buf=new byte256; 存放从客户端接收的请求信息。 4.创建一个DatagramPacket packet=new DatagramPacket(buf, 256); 用来从socket接收数据,它只有两个参数 5. 服务器阻塞 socket.receive(packet); 在客户的请求到来之前一直等待,6. 从到来的包中得到地址和端口号 InetAddress address=packet.getAddress(); int port=packet.getPort(); 7. 将数据送入缓冲区 或来自文件,或键盘输入 8. 建立报文包,用来从socket上发送信息 packet=new DatagramPacket (buf,buf.length, addr

温馨提示

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

评论

0/150

提交评论