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(); }
运行方法:
先运行接收端,再运行服务端
运行效果:


浙公网安备 33010602011771号