无连接数据报(UDP)通信

首先介绍一下,什么是数据报?

         数据报就是网上传输的独立数据包,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。Java中使用Datagram与DatagramPacket类。DatagramSocket类利用UDP协议来实现客户与服务器的Socket。send()用来发送数据报。receive()用来接收数据报。

       简单的应用如下:

      public class Udp1 {
public static void main(String[] args) throws Exception {
DatagramSocket datagramSocket = new DatagramSocket();

//构造数据包
String str="Java";
DatagramPacket packet = new DatagramPacket(str.getBytes(),
str.length(),InetAddress.getByName("localhost"),
7000);
//发送数据包
datagramSocket.send(packet);
//接收数据包
byte[] buffer=new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buffer, 100);
datagramSocket.receive(packet2);
//输出接收到的数据
System.out.println(new String(buffer,0,packet2.getLength()));
datagramSocket.close();
}
}


public class Udp2 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(7000);
//收信息
byte[] buffer= new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 1024);

//接收
socket.receive(packet);
System.out.println(new String(buffer,0,packet.getLength()));

//返回信息
String str="Sun!!!";
DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
str.length(),packet.getAddress(),packet.getPort()); 
socket.send(packet2);
socket.close();
}
}

注意:运行时,先运行Udp2,因为它是在等待接收,然后运行Udp1.,它向Udp2发送Java,Udp2接收到信息后,返回“Sun”。

附:

   UDP协议特点:
   1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。
   2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。
   3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。
   4、UDP传送数据较TCP快速,系统开销也少。
   5、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。
   从以上UDP协议特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值