EchoDemo's Blogs

Java中基于UDP协议的Socket编程

1、创建发送端

(1)建立DatagramSocket对象。该端点建立,系统会随机分配一个端口。如果不想随机配置,可以手动指定。

(2)将数据进行packet包的封装,必须要指定目的地地址和端口。

(3)通过socket服务的send()方法将该包发出。

(4)将socket关闭。

2、创建接收端

(1)建立DatagramSocket对象。要监听一个端口。

(2)通过socket的receive方法将数据存入数据包中。

(3)通过数据包dp的方法getData()、getAddress()、getPort()等方法获取包中的指定信息。

(4)将socket关闭。

3、举例说明

(1)接收端:

package com.iotek.tcpsocket;

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

public class UDPDemo2 {

    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8000);
        byte[] buff = new byte[100];
        DatagramPacket packet = new DatagramPacket(buff, 100);
        socket.receive(packet);//接收传来的数据包
        System.out.println(new String(buff,0,packet.getLength()));

        String string = "Me too!";
        DatagramPacket packet2 = new DatagramPacket(string.getBytes(), string.length(),packet.getAddress(),packet.getPort());
        socket.send(packet2);
        socket.close();
    }
}

(2)发送端:

package com.iotek.tcpsocket;

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

public class UDPDemo1 {

    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();
        String string = "I Love You!";
        //将数据进行封装,封装到数据包当中
        DatagramPacket packet = new DatagramPacket(string.getBytes(), string.length(),InetAddress.getByName("localhost"),8000);
        socket.send(packet);//发送

        byte[] buff = new byte[100];
        DatagramPacket packet2 = new DatagramPacket(buff, 100);
        socket.receive(packet2);
        System.out.println(new String(buff,0,packet2.getLength()));
        socket.close();
    }
}

(3)为了更直观地理解服务器端和客户端的交互过程,我们将两个文件拷贝到f盘当中。使用下列命令进行编译和执行。

//编译
javac -d . UDP*.java

//开启接收端
java com.iotek.tcpsocket.UDPDemo2

//开启发送端,这里另外开启一个窗口
java com.iotek.tcpsocket.UDPDemo1
🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------