JDK6.0学习笔记(十一)UDP通信服务器

    技术2022-05-12  9

    /** * UDP开发,无连接的Socket操作采用UDP协议,一个数据报文是一个独立的单元, * 包含所有这次投递的信息:目的地址和要发送的内容。 * UDP模式下,Socket不需要连接到一个目的地Socket,只是简单的投出数据 * 无连接的操作是高效和快速的,但是数据传输的可靠性不佳 * 常用于音频和视频的传输,偶尔丢失一两个数据包,不会对接受效果产生很大的影响 * UDP不提供数据的分组,不能对数据包进行排序,报文发出后,无法得知其是否安全到达 *  * UDP数据的接受方 *  * 需要接受侦听的端口号作为输入参数 * */import java.net.InetAddress;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UDPReceive {    public static void main(String args[]) {        try {            if (args.length != 1)                throw new IllegalArgumentException("Wrong number of args");            int port = Integer.parseInt(args[0]);            DatagramSocket dsocket = new DatagramSocket(port);// 创建实例,并固定监听port端口的报文            byte[] buffer = new byte[2048];// 接受的数据存放到buffer的字节数组当中            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);// 处理报文            for (;;) {                dsocket.receive(packet);// 接受数据报文到packet中,产生一个阻塞,                // 程序运行到这执行内部的循环,直到特定的事件被触发                String msg = new String(buffer, 0, packet.getLength());                System.out.println(packet.getAddress().getHostName() + ": "                        + msg);                packet.setLength(buffer.length);            }        } catch (Exception e) {            System.err.println(e);        }    }}   /** * UDP数据的发送方 *  * 需要接受3个输入参数,目标主机名、目标端口号、要发送的字符串 作为输入参数 * */import java.net.InetAddress;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UDPSend {    public static void main(String args[])   {    try     {        if (args.length < 3)             throw new IllegalArgumentException("Wrong number of args");      String host = args[0];      int port = Integer.parseInt(args[1]);      byte[] message;      String msg = args[2];       message = msg.getBytes();      InetAddress address = InetAddress.getByName(host);      DatagramPacket packet = new DatagramPacket(message, message.length,address, port);                                             //处理报文      DatagramSocket dsocket = new DatagramSocket(); // 创建实例,没有特定监听的端口,用出客户端的编程      dsocket.send(packet);//发送报文到packet      dsocket.close();//关闭 DatagramSocket    }    catch (Exception e)     {        System.err.println(e);    }  }}

    最新回复(0)