栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 基础- 网络编程-UDP笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 基础- 网络编程-UDP笔记

概念:用户数据报传输协议

特点:传输数据量小(64K),不一定传输成功,没有明确的客户端与服务端的概念,数据不会通过输入输出流传输,而是会通过打包成数据报,,再传输入通道

UDP 传输用到两个重要的类:DatagramSocket、DatagramPacket

构造方法

1.DatagramSocket (端口号)             //DatagramSocket 构造方法

2.1 DatagramPacket(字节数组,数组长度)        //构造一个空的数据报

2.2 DatagramPacket( 字节数组,长度,IP,端口号 )//将要传输的数据包装成一个数据报DatagramSocke

DatagramSocket的重要方法

1.send(Datagrampacket)    //将数据报发送到通道

2.receive( DatagramPacket)       //从通道中获取数据报,数据会注入传入的空数据报中,如果没有,程序就会停滞

DatagramPacket的重要方法

1.getlength()        //获取数据报中字节数组的真实长度

2.getData()         //从数据包中获取数据,是一个字节数组

下面是接收端代码(这个接收端,发送端是主观上认为的):

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

//UDP接收端
public class UDPreceiveA {
    public static void main(String[] args) throws IOException {
        //1.创建一个DatagramSocket对象,准备在9999端口接收数据
        DatagramSocket Socket = new DatagramSocket(9999);
        //2.构建一个DategramPacket准备接收数据
        byte[] buf = new byte[64 * 1024];
        DatagramPacket Packet = new DatagramPacket(buf, buf.length);
        //3.调用接受方法,将网络传输的DatagramPacket对象填充到packet对象//如果没有就会阻塞
        System.out.println("接收端在等待接收数据");
        Socket.receive(Packet);

        //4.可以将Packet进行拆包
        int length = Packet.getLength();//实际接受到数据字节长度
        byte[] data = Packet.getData();//接受数据
        String s = new String(data, 0, length);
        System.out.println(s);
        byte[] bytes = "嘉然,今天吃火锅".getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),9998);
       Socket.send(datagramPacket);



        Socket.close();
        System.out.println("B端关闭");

    }
}

下面是发送端代码:

package udp;

import java.io.IOException;
import java.net.*;

public class UDPSenderB {




    public static void main(String[] args) throws IOException {

        //创建DatagramSocket ,进行发送数据
        DatagramSocket datagramSocket = new DatagramSocket(9998);

        //2:将要返送的数据封装到一个Datagrampacket中
        byte[] bytes = "hello,嘉然今天吃什么".getBytes();
        //封装的DatagranPacket:字节数组,长度,主机(IP),端口
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 9999);
        datagramSocket.send(datagramPacket);
        byte[] buf = new byte[64 * 1024];
        DatagramPacket datagramPacket1 = new DatagramPacket(buf,buf.length);
        datagramSocket.receive(datagramPacket1);
        int length=datagramPacket1.getLength();
        byte[] data = datagramPacket1.getData();
        String s = new String(data, 0, length);
        System.out.println(s);
        datagramSocket.close();
        System.out.println("A端关闭");

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831780.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号