使用Java实现数据报通讯过程

happyxiaoyao23

happyxiaoyao23

2016-02-19 14:35

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的使用Java实现数据报通讯过程,过去的都会过去,迎接崭新的开始,释放更美好的自己。

  数据报(Datagram)使网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自身包含地址信息的消息,它能否到达目的地,到达的时间,到达时内容是否会变化不能准确知道的。!-- frame contents -- !-- /frame contents --它的通讯双方是不需要建立连接的,对于一些不需要很高质量的应用程序来说,数据报通讯是一个非常好的选择。在Java的java.net包中有两个类DatagramSocket和DatagramPacket,为应用程序中采用数据报通讯方式进行网络通讯。
  
  下面,我想具体解释在Java中实现客户端与服务器之间数据报通讯的方法,请看:
  
  一、客户端应用程序的工作流程
  
  1) 首先要建立数据报通讯的Socket,我们可以通过创建一个DatagramSocket对象来实现它,在Java中DatagramSocket类有如下两种构造方法:
  
  a)public DatagramSocket() 构造一个数据报socket,并使其与本地主机任一可用的端口连接。若打不开socket则抛出SocketException异常。
  
  b) public DatagramSocket(int port) 构造一个数据报socket,并使其与本地主机指定的端口连接。若打不开socket或socket无法与指定的端口连接则抛出SocketException异常。
  
  2) 创建一个数据报文包,用来实现无连接的包传送服务。每个数据报文包是用DatagramPacket类来创建,DatagramPacket对象封装了数据报包数据,包长度,目标地址,目标端口。作为客户端要发送数据报文包,要调用DatagramPacket类以如下形式的构造函数创建DatagramPacket对象,将要发送的数据和包文目的地址信息放入对象之中。
  
  DatagramPacket(byte bufferedarray[],int length,InetAddress address,int port)即构造一个包长度为length的包传送到指定主机指定端口号上的数据报文包,参数length必须小于等于bufferedarry.length
  
  DatagramPacket类提供了四个类来获取信息
  
  a) public byte[] getData() 返回一个字节数组,包含收到或要发送的数据报中的数据
  
  b) public int getLength() 返回发送或接收到的数据的长度
  
  c) public InetAddress getAddress() 返回一个发送或接收此数据报包文的机器的IP地址
  
  d) public int getPort() 返回发送或接收数据报的远程主机的端口号。
  
  3)创建完DatagramSocket和DatagramPacket对象,就可以发送数据报文包了。发送是通过调用DatagramSocket对象的send方法实现,它需要以DatagramPacket对象为参数,将刚才封装进DatagramPacket对象中的数据组成数据报发出。
  
  4)当然,我们也可以接收数据报文包,为了接收从服务器返回的结果数据报文包,我们需要创建一个新的DatagramPacket对象,这就需要用到DatagramPacket的另一种构造方式DatagramPacket(byte bufferedarray[],int length),即只需指明存放接收的数据报的缓冲区和长度。调用DatagramSocket对象的receive()方法来完成接收数据报的工作,此时需要将上面创建的DatagramPacket对象作为参数,该方法会一直阻塞知道收到一个数据报文包,此时DatagramPacket的缓冲区中包含的就是接收到的数据,数据报文包中也包含发送者的IP地址,发送者机器上的端口号等信息。
  
  5)处理接收缓冲区内的数据,获取服务结果。
  
  6)当通讯完成后,可以使用DatagramSocket对象的close()方法来关闭数据报通讯Socket。当然,Java自己会自动关闭Socket,释放DatagramSocket和DatagramPacket所占用的资源。但是作为一种良好的编程习惯,还是要显示的予以关闭。进入讨论组讨论。   
  下面我给出一个简单的利用数据报通讯的客户端程序,它能够完成与服务器简单的通讯。为了直观,我把它写成了Applet程序,由于本文不是介绍Applet,所以我只写了简要的注释,对Applet感爱好的朋友亲参阅有关书籍。
  
  import java.applet.*;
  !-- frame contents --
展开更多 50%)
分享

猜你喜欢

使用Java实现数据报通讯过程

编程语言 网络编程
使用Java实现数据报通讯过程

使用Java实现网络传输数据的压缩

编程语言 网络编程
使用Java实现网络传输数据的压缩

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java实现数据排序算法

编程语言 网络编程
Java实现数据排序算法

Java 中利用管道实现线程间的通讯

编程语言 网络编程
Java 中利用管道实现线程间的通讯

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

asp 用存储过程实现数据分页

ASP
asp 用存储过程实现数据分页

如何实现进程间数据通讯技术

编程语言 网络编程
如何实现进程间数据通讯技术

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

开启上帝模式囊括Win7所有系统设置

开启上帝模式囊括Win7所有系统设置

生产-消费模式的XML解析

生产-消费模式的XML解析
下拉加载更多内容 ↓