JAVA编写简单的UDP协议网络程序

首先编写发送端:

创建Scanner对象,用于循环输入发送的内容:

Scanner sc = new Scanner(System.in);

创建发送端套接字对象:

DatagramSocket ds = new DatagramSocket();

这里的参数可以写也可以不写,写的话就是指定端口号,注意不能选用1024以下的,不写的话就是自动分配一个端口号来发送数据包,这里我们先不写。

创建发送端数据包对象:

        
DatagramPacket dp = new DatagramPacket(content,content.length,InetAddress.getByName("192.168.1.155"),33333);

byte数组里存的是按系统默认编码表编码的字节信息。

数据包构造方法中,第二个参数为数据包内容的长度,第三个参数为IP地址对象,getByName方法获取了一个实例,该方法也可以传入IP地址字符串,最后一个参数是想要发送的端口号。

发送数据、关闭资源:

ds.send(dp);
        
ds.close();

创建循环:

public static void main(String[] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        DatagramSocket ds = new DatagramSocket();
        
        while(true) {
            System.out.println("请输入要发送的信息:(输入#退出)");
            String content = sc.nextLine();
            if(content.equals("#")) 
                break;
            byte[] contentbytes = content.getBytes();
            DatagramPacket dp = new DatagramPacket(contentbytes,contentbytes.length,InetAddress.getByName("192.168.1.155"),33333);
            ds.send(dp);
        }
        
        ds.close();
    }

接着编写接收端:

创建接收端套接字对象:

DatagramSocket ds = new DatagramSocket(33333);

这里必须写端口号,而且需要和发送端的数据包目标端口号一致。

创建接收端数据包对象:

byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);

byte数组用于存储传来的字节,将它传入接收端数据包中以接收数据。

接收数据包并打印在控制台:

ds.receive(dp);
        
System.out.println(new String(buffer,"utf-8"));

如果想得到详细的信息,还可以这样写:

ds.receive(dp);
        
System.out.println("收到了一条来自:"+dp.getAddress()
                    +" 端口号为"+dp.getPort()+"的消息,内容为:");
        
        
System.out.println(new String(buffer,"utf-8"));

释放资源:

ds.close();

将以上内容写入循环中:

暂时规定收到10条消息后结束程序

public static void main(String[] args) throws IOException {
        int msgcount = 0;
        DatagramSocket ds = new DatagramSocket(33333);
        byte[] buffer = null;
        
        while(msgcount<11) {
            buffer = new byte[64];
            DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
            ds.receive(dp);
            System.out.println("收到了一条来自:"+dp.getAddress()
            +" 端口号为"+dp.getPort()+"的消息,内容为:");
            msgcount++;

            System.out.println(new String(buffer,0,dp.getLength()));
        }
        

        ds.close();
    }

运行方法:

先运行接收端,再运行服务端

运行效果:

 

posted @ 2021-03-02 15:44  lucascube  阅读(224)  评论(0)    收藏  举报