04 网络编程

UDP

传输层协议, UDP 可能丢包, 不安全

这个传输一次最多是 60 K 的数据.

发送端

 

package com.leon.Network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class MyUdpSend {

    public static void main(String[] args) throws Exception {
        System.out.println("开始发送数据......");
        //1. 使用 datagramSocket 指定端口, 创建发送端
        DatagramSocket client = new DatagramSocket(8888);
        //2. 准备数据, 一定要转成字节数组
        String data = "asdfasdf";
        byte[] datas = data.getBytes();
        //3. 封装 DatagramPacket 包裹,需要指定目的地
        DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, 
                new InetSocketAddress("localhost",9999));
        //4. 发送包裹send(DatagramPacket p)
        client.send(packet);
        //5. 释放资源
        client.close();
        System.out.println("结束发送数据......");
    }
}

 接收端

package com.leon.Network;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class MyUdpReceive {

    public static void main(String[] args) throws Exception {
        System.out.println("开始接收数据......");
        //1. 使用 datagramSocket 指定端口, 创建接收端
        byte[] container = new byte[1024*60];
        DatagramSocket server = new DatagramSocket(9999);
        //2. 准备容器, 封装 DatagramPaket包裹
        DatagramPacket packet = new DatagramPacket(container, 0, container.length);
        //3. 阻塞式收包裹
        server.receive(packet);    // 阻塞拿数据
        //4. 分析数据 byte[] getData(), getLength()
        byte[] datas = packet.getData();
        int len = packet.getLength();
        System.out.println(new String(datas, 0, len));
        //5. 释放资源
        server.close();
        System.out.println("结束接收数据......");
    }
}

所以, 如果是上传文件, 利用 UDP 也是没有问题的,基本步骤不变, 只是需要把文件转换成字节数组存储并转发.

TCP

传输层协议: 面向连接, 安全可靠.

245

实例聊天室

猜你喜欢

转载自www.cnblogs.com/moveofgod/p/12470387.html