DatagramSocket实现UDP网络传输

网络协议:UDP、TCP

TCP:传输控制协议。在使用TCP协议之前,首先建立TCP连接,形成数据传输通道。

        传输数据前,采用“三次握手”方式,是可靠的。可以传输大量的数据

        TCP进行通信的:客户端、服务端

UDP:将数据、源、目的封装成数据包,不需要建立连接

           因无需建立连接,因此是不可靠的;每个数据包的大小限制在64k内,不适合传输大量数据

        UDP进行通信的:接收端。发送端

UDP网络通信编程:

        核心类:DatagramSocket。通过调用DatagramSocket中的方法发送和接收数据。

        发送端A(DatagramSocket)-----接收端B(DatagramSocket)传送DatagramSocket对象【包含数据、ip、端口】

UDP说明:

        1,没有明确的客户端和服务端,因此演变为数据的发送端和接收端

        2,接收和发送数据都是通过DatagramSocket对象完成的

        3,DatagramSocket可以指定在哪个端口传输数据

        4,发送端将数据封装到DatagramSocket对象中,并发送;接收端接收DatagramSocket对象,并完成数据的拆包,取出数据。

// 使用DatagramSocket完成网络通信编程

// 发送端代码部分
    // 创建DatagramSocket对象,准备在9998端口发送和接收数据
DatagramSocket datagramSocket = new DatagramSocket(9998);
    // 准备数据
byte[] data = "hello,明天吃火锅~~".getBytes();
    // 封装数据
DatagramPacket dataPacket = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 9999);
    // 发送数据
datagramSocket.send(dataPacket);
    // 接收数据
Byte[] bytes = new Byte[1024];
dataPacket = new DatagramSocket(bytes, bytes.length)
datagramSocket.receive(dataPacket);
    // 对数据进行拆包
int length = dataPacket.length();
byte[] data = dataPacket.getData();
    // 将得到的数据转为字符串并显示输出
String str = new String(data, 0, length);
System.out.println(str);
    // 关闭数据通道,并退出
datagramSocket.close();
System.out.println("发送端退出..."); 



// 接收端代码部分
    // 创建DatagramSocket对象,准备在9999端口发送和接收数据
DatagramSocket datagramSocket = new DatagramSocket(9999);
    // 构建DatagramPacket对象,准备接收数据
Byte[] bytes = new Byte[1024];
DatagramPacket dataPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("接收端正在接收数据...");
datagramSocket.receive(dataPacket);
    // 对数据进行拆包
int length = dataPacket.length();
byte[] data = dataPacket.getData();
    // 将得到的数据转为字符串并显示输出
String str = new String(data, 0, length);
System.out.println(str);
    // 向发送端回复
Byte[] datas = "好的,明天见~~".getBytes();
    // 封装数据,发送数据
dataPacket = new DatagramPacket(datas, datas.length, InetAddress.getLocalHost(), 9999);
datagramSocket.send(dataPacket);
    // 关闭数据通道,退出
datagramSocket.close();
System.out.println("接收端退出..");

发送端在本机的9998端口发送和接收数据,在封装数据包时传入的IP、端口:本机的9999端口

接收端在本机的9999端口发送和接收数据,在封装数据包时传入的IP、端口:本机的9998端口

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值