JAVA程序设计-网络编程.ppt_第1页
JAVA程序设计-网络编程.ppt_第2页
JAVA程序设计-网络编程.ppt_第3页
JAVA程序设计-网络编程.ppt_第4页
JAVA程序设计-网络编程.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、网络通信,Java与Internet InetAddress与URL Socket通信 数据报通信,TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。 大多数基于Internet的应用程序被看作TCP/IP网络的最上层, 如:ftp,http,smtp,pop3,telnet等。,Java与Internet网络基本概念,物理层,传输层:在TCP/IP网络中,不同的机器之间进行通信时,数据的传输是由传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等。 TCP/IP网络中最常用的传输协议就是TCP(Transport Control Protocol)

2、和UDP(User Datagram Protocol)。 网络层:对TCP/IP网络中的硬件资源进行标识。连接到网络中的每台计算机(或其他设备)都有唯一的地址,这就是IP地址。IP地址实质上是一个32位的整数,通常以“d. d. d. d”的形式表示,每个d是一个8位整数。,Java与Internet网络基本概念,物理层,传输层中两类传输协议,TCP (Transport Control Protocol ) 面向连接的能够提供可靠的流式数据传输的协议。类似于打电话的过程。 URL, Socket, ServerSocket等类都使用TCP协议进行网络通讯。 UDP (User Datagr

3、am Protocol ) 非面向连接的提供不可靠的数据包式的数据传输的协议。类似于从邮局发送信件的过程。 DatagramPacket, DatagramSocket等类使用UDP协议进行网络通讯。 注:当对所传输的数据具有时序性和可靠性等要求时,应使用TCP协议;当传输的数据比较简单、对时序等无要求时,UDP协议能发挥更好的作用。,Java与Internet网络基本概念,一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。 端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓

4、的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点。,网络服务,http,ftp,其他服务,23,telnet,端口,21,80,客户程序,Socket,IP,port,IP与端口号组合而得出的Socket,可以完全分辨Internet上运行的程序。,端口号是用一个16位的整数来表达的,其范围为065535,其中01023为系统所保留,专门给那些通用的服务(well-known services),如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口为23,因此,当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。,Jav

5、a与Internet端口号,Java与InternetJava中的网络支持,针对网络通信的不同层次,Java提供的网络功能有四大类:InetAddress 、URL、Socket、Datagram。 InetAddress面向的是IP层,用于标识网络上的硬件资源。 URL面向的应用层,通过URL,Java程序可以直接送出或读入网络上的数据。 Socket和Datagram面向的则是传输层。Sockets使用的是TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。Datagram则使用UDP协议,是另一种网络传输方式,它把数据的目的地纪录在数据包中,然后

6、直接放在网络上。,类InetAddress可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。 InetAddress类实例通常是用它提供的静态方法来获取: public static InetAddress getByName(Stringhost) host可以是一个机器名,也可以是一个形如“%d.%d.%d.%d”的IP地址或一个DNS 域名。 public static InetAddress getLocalHost() 这两个方法通常会产生UnknownHostException例外,应在程序中捕获处理。 以下是InetAddress类的几个主要方法: pu

7、blic String getHostAddress():获得本对象的IP地址“%d.%d.%d.%d”。 public String getHostName():获得本对象的机器名。,使用InetAddress,测试InetAddress类,Socket通信,在Java中,基于TCP协议实现网络通信的类有两个:在客户端的Socket类和在服务器端的ServerSocket类。 在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例。 在客户端通过规定一个主机和端口号创建一个 socket实例,连到服务器上。 ServerSocket类的accept方法使服务器处于

8、阻塞状态,等待用户请求。,类Socket 构造方法: public Socket(Stringhost, intport) Socket的输入/输出流管理 public InputStream getInputStream() public OutputStream getOutputStream() 关闭Socket public void close() throws IOException 注:上述方法都将抛出例外IOException,程序中需要捕获处理。,类ServerSocket 构造方法: public ServerSocket(intport) 主要方法 public Sock

9、et accept():等待客户端的连接 public void close():关闭Socket 注:这些方法都将抛出例外IOException,程序中需要捕获处理。,Socket通信,无论一个Socket通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的,都包括以下四个基本步骤: 1、在客户方和服务器方创建Socket/ServerSocket。 2、打开连接到Socket的输入/输出流。 3、利用输入/输出流,按照一定的协议对Socket进行读/写操作。 4、关闭输入/输出流和Socket。 通常,我们的主要工作是针对所要完成的功能在第3步进行编程,第1、2、4步对所有的通信程序

10、来说几乎都是一样的。,Socket通信,Server.java Client.java,解决方案一: 在一台计算机上一次启动多个服务器程序,只要端口号不同。 myserver1 myclient1 myserver2myclient2,Socket通信支持多Client,解决方案二: 将服务器写成多线程的,不同的处理线程为不同的客户服务。主线程只负责循环等待,处理线程负责网络连接,接收客户输入的信息。 /主线程 while (true) accept a connection ; create a thread to deal with the client ; ,Socket通信支持多Cli

11、ent,Socket通信支持多Client,serverSocket = new ServerSocket(4444); while (listening) Socket socket; socket = serverSocket.accept(); /程序将在此等候客户端的连接 new MultiTalkServerThread(socket).start(); serverSocket.close();,class MultiTalkServerThread extends Thread public MultiTalkServerThread(Socket socket) this.so

12、cket = socket; public void run() ,Socket通信 支持多Client,Computer_client.java,Computer_server.java,UDP协议是无连接的协议,它以数据报作为数据传输的载体。数据报是一个在网络上发送的独立信息,它的到达、到达时间以及内容本身等都不能得到保证。数据报的大小是受限制的,每个数据报的大小限定在64KB以内。 UDP协议无需在发送方和接收方建立连接。数据报在网上可以以任何可能的路径传往目的地。 在Java中,下面两个类是基于UDP协议实现网络通信的: 用于表达通信数据的数据报类DatagramPacket 用于进行

13、端到端通信的类DatagramSocket,数据报通信,构造方法 public DatagramPacket(bytebuf, intlength) 上述方法用于接收数据 public DatagramPacket(bytebuf, intlength, InetAddress address, intport) 上述方法用于发送数据 获取数据获取接收报中的信息 public InetAddress getAddress() public int getPort() public byte getData() public int getLength() 设置数据设置发送报中的信息 setAd

14、dress(InetAddressiaddr) setPort(intiport) setData(bytebuf) setLength(intlength),数据报通信类DatagramPacket,构造方法 public DatagramSocket()/用来发送 public DatagramSocket(intport):在指定的端口通信 /用来接收 上述方法都将抛出例外SocketException,程序中需要捕获处理。 最主要的方法发送与接收数据报 public void receive(DatagramPacketp) public void send(DatagramPacke

15、tp) 这两个方法都将抛出例外IOException,程序中需要捕获处理。,数据报通信类DatagramSocket,数据报通信,发送端发出数据报的标准步骤: 1. 定义数据成员 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用来存放接收方的地址) int port; (用来存放接收方的端口号) 2. 创建数据报Socket对象 try socket = new DatagramSocket(4445); catch(.SocketException e) socket 绑定到一个本地的可用端口,等待接收客

16、户的请求。,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

17、. 将数据送入缓冲区buf 或来自文件、或键盘输入 8. 建立报文包,用来向socket上发送信息 packet = new DatagramPacket(buf, buf.length, address, port); 9. 发送数据包 socket.send(packet); 10.关闭socket socket.close();,数据报通信,数据报通信点到点通信,接收端接收数据报的标准步骤: 1. 定义数据成员 int port; InetAddress address; DatagramSocket socket; DatagramPacket packet; byte sendBuf = new byte256; 2. 建立socket(用来发送数据报) socket = new DatagramSocket();,数据报通信点到点通信,3. 向服务器发出请求报文 address = InetAddress.getByName(args0); port = parseInt(args1); packet = new DatagramPacket(sendBuf, 256, address, port); socket.send(packet); 这个数据报本身带有客户端的信息 4. 客户机等待应

温馨提示

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

评论

0/150

提交评论