Java语言课件:第3章 2网络编程_第1页
Java语言课件:第3章 2网络编程_第2页
Java语言课件:第3章 2网络编程_第3页
Java语言课件:第3章 2网络编程_第4页
Java语言课件:第3章 2网络编程_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、1第3章 线程和网络编程-网络编程重点内容: 1 网络编程基础2 基于TCP的网络编程 3 基于UDP的网络编程21、 网络编程基础1 通信协议TCP/IP模型,TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项研究计划实现若干台主机的相互通信。现在TCP/IP已成为Internet上通信的工业标准。TCP/IP模型包括4个层次:与ISO/OSI的7层结构有所简化。 应用层 传输层 网络层 网络接口1 网络编程基础3各层所使用的协议主要有:应用层:远程登录协议Telnet、文件传输协议FTP、超文本传输协议HTTP、域名服务DNS、简单邮件传输协议SMTP、邮局协议POP3 等。传

2、输层:传输控制协议TCP、用户数据报协议UDP。网络层:网际协议IP Internet控制报文协议ICMP、Internet组管理协议IGMP等。1 网络编程基础4 TCP协议TCP(Transmission Control Protocol),指的是传输控制协议,它是主要负责数据的分组和重组。在简化的计算机网络OSI模型中,它完成传输层所指定的功能TCP是一个“可靠的”、面向连结的传输机制,通过三次握手建立连接。它提供一种可靠的字节流保证数据完整、无损并且按顺序到达1 网络编程基础5UDP协议UDP(User Datagram Protocol)指的是用户数据报协议。和TCP一样都是网络传输

3、层上的协议,但与TCP有本质的区别UDP是“不可靠”、无连结和面向消息的协议,它使用数据报进行传输1 网络编程基础62端口端口(Port)可以被理解成计算机与外界通信交流的窗户。网络上的一台计算机可以提供多种服务,单靠IP地址无法将它们区别开,所以通过“IP地址+端口号”的形式来区分不同的服务端口号是一个整数,通常范围在065535。小于1024的端口号一般的分配给特定的服务协议的1 网络编程基础73套接字(socket)的引入为了方便开发网络应用软件,最早由美国佰克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。Socket的出现使程序员可以很方便地访问

4、TCP/IP,从而开发各种网络应用程序。随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统中。Java语言也引入了套接字编程模型。1 网络编程基础8套接字套接字,是支持TCP/IP的网络通信的基本操作单元,可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系通常用的TCP/IP协议的3种套接字类型有 流套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)、原始套接字(SOCK_RAW)流套接字用于提供面向连接、可靠的数据传输服务数据报

5、套接字提供了一种无连接的服务原始套接字(SOCK_RAW):原始套接字可以读写内核没有处理的IP数据包,可以进行比较底层的操作。一般的程序也涉及不到原始套接字。1 网络编程基础9客户/服务器模式C/S(Client/Server,客户机/服务器)模式又称C/S结构,是20世纪80年代末逐步成长起来的一种模式,是软件系统体系结构的一种C/S结构的关键在于功能的分布,一些功能放在前端机(即客户机)上执行,另一些功能放在后端机(即服务器)上执行客户机/服务器的通信基于套接字。套接字是internet通信的端点。可以理解为是客户机和服务器之间的两端在 Berkeley 套接字中,套接字的概念允许单个计

6、算机同时服务于很多不同的客户,并能够提供不同类型信息的服务1 网络编程基础10Java与网络Java 通过扩展流式输入/输出接口和增加在网络上建立输入/输出对象特性这两个方法支持 TCP/IPJava 支持TCP和UDP协议族Java提供的网络功能主要有三大类:URL、Socket、DatagramTCP用于网络的可靠的流式输入/输出。UDP支持更简单的、快速的、点对点的数据报模式1 网络编程基础11URL类URL 提供了一个相当容易理解的形式来唯一确定或对 Internet 上的信息进行编址在 Java 的网络类库中,URL 类为用URL在Internet 上获取信息提供了一个简单的、简洁的

7、用户编程接口(API)URL规范以四个元素为基础:所用到的协议、主机名或所用主机的IP地址、端口号、实际的文件路径如:/home/welcome.html1 网络编程基础12URL类中常用方法方法名称方法说明public URL(String addr) throws MalformedURLException创建一个给定资源地址的URL对象,这里,addr应是一个合法的URL值。public URL(String protocol,String host, String file) throws MalformedURLException创建一个拥有指定协议名称、主机名、文件名的URL对象p

8、ubic URL(String protocol, String host, int port, String file) throws MaformedURLException创建一个拥有指定协议名称、主机名、端口号、文件名的URL对象public String getProtocol()返回URL中的协议名称1 网络编程基础13方法名称方法说明public String getHost()返回URL中的主机名public int getPort()返回URL中的端口号。如果URL中没有设定端口号,该函数返回-1。public String getFile()返回URL中的文件名部分publ

9、ic String getRef()返回URL的引用。public String toString()返回整个URL值URL类中常用方法1 网络编程基础14URL类举例 import .*;public class Test public static void main(String args) throws MalformedURLException URL hp = new URL(/download); System.out.println(Protocol: + hp.getProtocol(); System.out.println(Port: + hp.getPort(); Sy

10、stem.out.println(Host: + hp.getHost(); System.out.println(File: + hp.getFile(); System.out.println(Ext: + hp.toExternalForm(); Protocol: httpPort: -1Host: File: /downloadExt:/download1 网络编程基础15URL类举例通过URL类我们可以从网络上获取想要的资源.方法是调用 URL类中的方法 openConnection(),创建一个URLConnection对象,用该对象创建输入/输出流,这样网络上的资源就可以流入本

11、地了.下面来看一个通过URL下载文件的例子:1 网络编程基础16使用URL下载文件的例子:import java.awt.*;import java.awt.event.*;import .*;import java.io.*;public class Download public static void main(String args) Frame f=new Frame(“程序下载);f.setSize(600,400);f.setLocation(100,100);1 网络编程基础17Panel p=new Panel(); Label l=new Label(Please inpu

12、t URL:);final TextField tf=new TextField(30);p.add(l);p.add(tf);f.add(p,North);final TextArea ta=new TextArea();f.add(ta,Center);Button btn=new Button(Download);f.add(btn,South);btn.addActionListener(this); 使用URL下载文件的例子:1 网络编程基础18public void actionPerformed(ActionEvent e) String str=tf.getText();try

13、 URL url=new URL(str); URLConnection urlConn=url.openConnection(); String line=System.getProperty(line.separator); ta.append(Host: +url.getHost(); ta.append(line); ta.append(Port: +url.getPort(); ta.append(line); ta.append(ContentType: +urlConn.getContentType(); ta.append(line); ta.append(ContentLen

14、gth: +urlConn.getContentLength(); InputStream is=urlConn.getInputStream(); FileOutputStream fos=new FileOutputStream(“d.html); int data; while(data=is.read()!=-1) fos.write(data); is.close(); fos.close();catch(Exception ex) ex.printStackTrace(); 使用URL下载文件的例子:1 网络编程基础19 f.addWindowListener(new Window

15、Adapter() public void windowClosing(WindowEvent e) System.exit(0); ); f.show(); 使用URL下载文件的例子:1 网络编程基础20执行结果:返回使用URL下载文件的例子:1 网络编程基础212 基于TCP的网络编程Java的TCP编程是通过流式套接字实现的。流式套接字用于在主机和 Internet 之间建立可靠的、双向的、持续的、点对点的流式连接。J包中有两类TCP套接字。一种是服务器端的套接字serverSocket类 ,另一种是客户端的套接字Socket类。Socket类:表示双向连接的客户端。ServerSock

16、et类:表示双向连接的服务端Java实用编程技术22基于TCP的Socket编程ServerServerSocket(int port)Socket.accept()OutputStreamSocket.getOutputSrteam()InputStreamSocket.getInputStream()Socketclose()ClientSocket(inetAddress Address, int port)OutputStreamSocket.getOutputSrteam()InputStreamSocket.getInputStream()Socketclose()2 基于TCP的

17、网络编程23服务器程序编写:1.调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;2.调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字.3.调用Socket类的getOutputStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接受.4.最后关闭通信套接字.2 基于TCP的网络编程24客户端程序编写:1.调用Socket()创建一个流套接字,并连接到服务器端;2.调用Socket类的OutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和

18、接受3.最后关闭通信套接字.2 基于TCP的网络编程25下面是一个典型的创建Server端ServerSocket的过程: ServerSocket server=null;try server=new ServerSocket(4700); /创建一个ServerSocket在端口4700监听客户请求catch(IOException e)System.out.println(can not listen to :+e);Socket socket=null;try socket=server.accept(); /accept()是一个阻塞的方法,一旦有客户请求, /它就会返回一个Sock

19、et对象用于同客户进行交互catch(IOException e)System.out.println(Error:+e);2 基于TCP的网络编程26下面是一个典型的创建客户端Socket的过程:trySocket socket=new Socket( ,4700); /是TCP/IP协议中默认的本 /机地址catch(IOException e)System.out.println(Error:+e);2 基于TCP的网络编程27import java.io.*;import .*;public class ServerSoc public static void server()try

20、ServerSocket ss=new ServerSocket(6000); System.out.println(“服务器已经启动”); Socket s=ss.accept(); OutputStream os=s.getOutputStream(); InputStream is=s.getInputStream(); os.write(Hello,welcom you!.getBytes(); byte buf=new byte100; int len=is.read(buf); System.out.println(服务器收到客户信息:+ new String(buf,0,len)

21、; os.close(); is.close(); ss.close();catch(Exception ex) ex.printStackTrace(); 2 基于TCP的网络编程TCP通信例子:28import java.io.*;import .*;public class ClientSoc public static void main(String args) client(); public static void client() try Socket s=new Socket(InetAddress.getByName(localhost),6000); OutputStre

22、am os=s.getOutputStream(); InputStream is=s.getInputStream(); os.write(Hello,this is zhangsan.getBytes(); byte buf=new byte100; int len=is.read(buf); System.out.println(客户收到服务器信息: “ +new String(buf,0,len); os.close(); is.close(); s.close(); catch(Exception ex) ex.printStackTrace(); 2 基于TCP的网络编程TCP通信

23、例子:29服务器窗口显示:服务器收到客户信息:Hello,this is zhangsan客户端窗口显示:客户收到服务器信息: Hello,welcom you!2 基于TCP的网络编程TCP通信例子:30import .*;import java.io.*;public class DemoSocket extends Threadprivate Socket s;public DemoSocket(Socket s)this.s=s; public void run() tryOutputStream os=s.getOutputStream();InputStream is=s.getI

24、nputStream();os.write(Hello,welcom you!.getBytes();byte buf=new byte100;int len=is.read(buf);System.out.println(服务器端收到客户端信息: “ + new String(buf,0,len);os.close();is.close();s.close(); catch(Exception ex) ex.printStackTrace(); 2 基于TCP的网络编程TCP多线程编程31public static void server() tryServerSocket ss=new S

25、erverSocket(6000);while(true)Socket s=ss.accept();new DemoSocket(s).start(); catch(Exception ex)ex.printStackTrace(); 2 基于TCP的网络编程TCP多线程编程32public static void client() trySocket s=new Socket(InetAddress.getByName(null),6000);OutputStream os=s.getOutputStream();InputStream is=s.getInputStream(); os.w

26、rite(Hello,this is zhangsan.getBytes();byte buf=new byte100;int len=is.read(buf);System.out.println(客户端收到服务器端信息: “ +new String(buf,0,len);os.write(Hello,this is wuxing.getBytes();os.close();is.close();s.close(); catch(Exception ex)ex.printStackTrace(); 2 基于TCP的网络编程TCP多线程编程33public static void main(S

27、tring args) if(args.length0)server();elseclient();2 基于TCP的网络编程TCP多线程编程34服务器端收到客户端信息: Hello,this is wuxing服务器端收到客户端信息: Hello,this is zhangsan服务器端收到客户端信息: Hello,this is wuxing客户端窗口1显示:客户收到服务器信息: Hello,welcom you!客户端窗口2显示:客户收到服务器信息: Hello,welcom you!服务器窗口显示:2 基于TCP的网络编程TCP多线程编程353 基于UDP的网络编程UDP协议 UDP是U

28、ser Datagram Protocol的简称,是一种无连接的协议,每个数据包都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。使用UDP时,每个数据包中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。但使用UDP传输数据是有大小限制的,每个被传输的数据包必须限定在64 KB之内。36基于UDP的Socket编程接收端DatagramSocket(int port)DatagramPacket(byte buf, int length)DatagramSocket.recer

29、ve(DatagramPacket p)DatagramSocketclose()发送端DatagramSocket()DatagramPacket(bytebuf, int length,InetAddress address,Int port)DatagramSocket.send(DatagramPacket p)DatagramSocketclose()3 基于UDP的网络编程37接收端程序编写:1.调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口.2.调用DatagramPacket(byte buf, int length),创建一个字节数

30、组以接收UDP包.3.调用DatagramSocket类的receive(),接收UDP包.4.最后关闭数据报套接字3 基于UDP的网络编程38发送端程序编写:1.调用DatagramSocket()创建一个数据报套接字.2.调用DataramPacket(byte buf, int offset, int length,InetAddress address,int port),建立要发送的UDP包.3.调用DatagramSocket类的send(),发送UDP包4.最后关闭数据报套接字.3 基于UDP的网络编程39UDP通信例子:package code;import .*;import

31、 java.io.*;public class UdpDemo public static void main(String args) if(args.length0)recev();elsesen();3 基于UDP的网络编程40public static void recev() try DatagramSocket ds=new DatagramSocket(6000);byte buf=new byte100;DatagramPacket dp=new DatagramPacket(buf,100);ds.receive(dp);System.out.println(“接收端收到:

32、+new String(buf,0,dp.getLength();String str=Welcom you!;DatagramPacket dpSend=new DatagramPacket(str.getBytes(), str.length(), dp.getAddress(),dp.getPort();ds.send(dpSend);ds.close(); catch(Exception ex) ex.printStackTrace(); 3 基于UDP的网络编程UDP通信例子:41public static void sen() tryDatagramSocket ds=new Da

33、tagramSocket();String str=Hello,this is zhangsan;DatagramPacket dp=new DatagramPacket(str.getBytes(), str.length(),InetAddress.getByName(localhost),6000);ds.send(dp);byte buf=new byte100;DatagramPacket dpRecv=new DatagramPacket(buf,100);ds.receive(dpRecv);System.out.println(“发送端: +new String(buf,0,d

34、pRecv.getLength();ds.close(); catch(Exception ex)ex.printStackTrace(); 3 基于UDP的网络编程UDP通信例子:42接收端显示:发送端显示:发送端收到: Welcom you!接收端收到: Hello,this is zhangsan3 基于UDP的网络编程43一个简单的企业内部QQ实例该实例是UDP通信协议的应用.该实例有几个模块组成:主窗体类:EQ.java数据库操作类:Dao.java用户管理模块:UserTreeRanderer.java通信模块TelFrame.java4445public class EQ ext

35、ends Dialog public static void main(String args) try String laf = preferences.get(lookAndFeel, java默认); if (laf.indexOf(当前系统)-1) UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName(); EQ frame = new EQ(); frame.setVisible(true); frame.SystemTrayInitial();/ 初始化系统栏 frame.server(); frame.checkPlacard(); catch (Exception e) e.printStackTrace();46private void server() / 服务器启动方法new Thread(new Runnable() public void run() while (true) if (ss != null) byte buf = new byte4096; DatagramPacket dp = new DatagramPacket(buf, buf.length); try ss.receive(dp); catch (IOException

温馨提示

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

评论

0/150

提交评论