java中网络编程------UDP协议(实现步骤)
发送端
第一步:创建socket对象
DatagramSocket ds=new DatagramSocket();
第二步:创建DatapramPacket对象,将数据打包好
DatagramPacket p = new DatagramPacket(bytes,length,address,port);
传入三个值 第一个值传字节,第二个传address主机名或者IP地址,最后一个传程序端口号.
第三步:发送数据
ds.send(p);
调用send方法,数据包.就可以发送了?
第四步:关闭资源
ds.close();
package com.mytest.test02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class SendDemo01 { public static void main(String[] args) throws IOException { //创建发送端的端口号 DatagramSocket ds=new DatagramSocket(); //创建数据并打包 /* * DatapramPacket * 数据byte[] * ip地址 * 进程地址端口号 * DatapramPacket(byte[] by,int length,InetAddress,int port) */ String s="帅哥,约不约?"; byte[] bytes = s.getBytes(); int length = bytes.length; //192.168.26.106 InetAddress address = InetAddress.getByName("坏坏想乖乖"); int port=28888; //打包数据发送 DatagramPacket p = new DatagramPacket(bytes,length,address,port); //发送数据 ds.send(p); //释放数据 ds.close(); } }
接收端
第一步:创建Socket对象,传入端口号
DatagramSocket ds = new DatagramSocket(8888);
在创建Socke对象时就,传入端口号
第二步:创建数据包对象
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
创建接受端的数据传入数据包
第三步:接收数据
ds.receive(dp);
第四步:解析数据
//InetAddress getAddress() : 获取发送端的IP对象
InetAddress address = dp.getAddress();
//byte[] getData() :获取接收到的数据,也可以直接使用创建包对象时的数组
byte[] data = dp.getData();
//int getLength() :获取具体收到数据的长度
int length = dp.getLength();
第五步:输出数据
System.out.println(new String(bys,0,length));
第六步:关闭资源
ds.close();
package com.itheima_02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /* * 使用UDP协议接收数据 创建接收端Socket对象 接收数据 解析数据 输出数据 释放资源 */ public class ReceiveDemo { public static void main(String[] args) throws IOException { //创建接收端Socket对象 DatagramSocket ds = new DatagramSocket(8888); //接收数据 //DatagramPacket(byte[] buf, int length) byte[] bys = new byte[1024]; DatagramPacket dp = new DatagramPacket(bys,bys.length); System.out.println(1); ds.receive(dp);//阻塞 System.out.println(2); //解析数据 //InetAddress getAddress() : 获取发送端的IP对象 InetAddress address = dp.getAddress(); //byte[] getData() :获取接收到的数据,也可以直接使用创建包对象时的数组 byte[] data = dp.getData(); //int getLength() :获取具体收到数据的长度 int length = dp.getLength(); //输出数据 System.out.println("sender ---> " + address.getHostAddress()); //System.out.println(new String(data,0,length)); System.out.println(new String(bys,0,length)); //释放资源 ds.close(); } }