网络编程之 UDP 消息发送

 

发短信:不用连接,但需要知道对方的地址,客户端、服务端没有明确的界限,可以说没有客户端、服务端一说。

 

 

发送端

 

package lesson03;

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

/**
 * 发送端
 */
public class UdpClientDemo1 {

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

        //1、建立一个 Socket
        DatagramSocket socket = new DatagramSocket();

        /**
         * 2、建个包
         */

        //需要发送的消息
        String msg = "你好啊,服务器!";

        //发送地址
        InetAddress localhost = InetAddress.getByName("localhost"); //主机
        //发送端口
        int port = 9090;

        /**
         * 五个参数:
         * @param   buf   msg.getBytes():需要发送的数据包
         * @param   offset   0:数据偏移量
         * @param   length   msg.getBytes().length:数据长度
         * @param   address   localhost:目标地址
         * @param   port   port:目标端口
         */
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);

        //3、发送包
        socket.send(packet);

        //4、关闭流
        socket.close();
    }

}
 

接收端

 

package lesson03;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 接收端
 */
public class UdpServerDemo1 {

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

        //开放端口
        DatagramSocket socket = new DatagramSocket(9090);

        //接收数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);

        //接收
        socket.receive(packet); //阻塞接收

        //输出数据包地址
        System.out.println(packet.getAddress().getHostAddress());
        /**
         * 输出数据包数据
         * packet:Data 类型
         * 通过构造器转成 String 类型:new String();
         */
        System.out.println(new String(packet.getData(), 0, packet.getLength()));

        //关闭连接
        socket.close();

    }

}
 
posted @ 2020-11-20 13:58  无明之辈  阅读(214)  评论(0编辑  收藏  举报