UDP传输

  • 1.发送Send
    • 创建DatagramSocket, 随机端口号
    • 创建DatagramPacket, 指定数据, 长度, 地址, 端口
    • 使用DatagramSocket发送DatagramPacket
    • 关闭DatagramSocket
  • 2.接收Receive
    • 创建DatagramSocket, 指定端口号
    • 创建DatagramPacket, 指定数组, 长度
    • 使用DatagramSocket接收DatagramPacket
    • 关闭DatagramSocket
    • 从DatagramPacket中获取数据
  • 3.接收方获取ip和端口号
    • String ip = packet.getAddress().getHostAddress();
    • int port = packet.getPort();

 


UDP传输优化

  • 接收端Receive
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DatagramSocket socket = new DatagramSocket(6666);                       //创建socket相当于创建码头
    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);       //创建packet相当于创建集装箱
     
    while(true) {
        socket.receive(packet);                                             //接收货物
         byte[] arr = packet.getData();
        int len = packet.getLength();
        String ip = packet.getAddress().getHostAddress();
        System.out.println(ip + ":" + new String(arr,0,len));
    }

     

     
  • 发送端Send

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
    Scanner sc = new Scanner(System.in);
     
    while(true) {
        String str = sc.nextLine();
        if("quit".equals(str))
            break;
        DatagramPacket packet =                             //创建packet相当于创建集装箱
                new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
        socket.send(packet);            //发货
    }
    socket.close();

     

     

 


 

UDP传输多线程

发送和接收在一个窗口完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class Demo_MoreThread {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Receive().start();
 
        new Send().start();
    }
 
}
 
class Receive extends Thread {
    public void run() {
        try {
            DatagramSocket socket = new DatagramSocket(6666);                   //创建socket相当于创建码头
            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);   //创建packet相当于创建集装箱
 
            while(true) {
                socket.receive(packet);                                             //接收货物
                byte[] arr = packet.getData();
                int len = packet.getLength();
                String ip = packet.getAddress().getHostAddress();
                System.out.println(ip + ":" + new String(arr,0,len));
            }
        } catch (IOException e) {
 
            e.printStackTrace();
        }
    }
}
 
class Send extends Thread {
    public void run() {
        try {
            DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
            Scanner sc = new Scanner(System.in);
 
            while(true) {
                String str = sc.nextLine();
                if("quit".equals(str))
                    break;
                DatagramPacket packet =                             //创建packet相当于创建集装箱
                        new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                socket.send(packet);            //发货
            }
            socket.close();
        catch (IOException e) {
 
            e.printStackTrace();
        }
    }
}

 

 

posted on   LoaderMan  阅读(220)  评论(0编辑  收藏  举报

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示