[javaSE] 网络编程(UDP通信)
UDP发送端
获取DatagramSocket对象,new出来
获取DatagramPacket对象,new出来,构造参数:byte[]数组,int长度,InetAddress对象,int端口
调用DatagramSocket对象的send()方法,发送出去,参数:DatagramPacket对象
调用DatagramSocket对象的close()方法,关闭资源
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 发送端 * @author taoshihan * */ public class Sender { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket(); byte[] buf="Hello UDP".getBytes(); DatagramPacket p=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),10000); ds.send(p); ds.close(); } }
UDP接收端
获取DatagramSocket对象,new出来,构造参数:int端口号
获取DatagramPacket对象,new出来,构造参数:byte[]数组,int长度
调用DatagramSocket对象的receive()方法,接收数据,参数:DatagramPacket对象
调用DatagramPacket对象的getAddress()方法,获取到InetAdress对象
调用DatagramPacket对象的getData()方法,获取到byte[]字节数组,接收的数据
调用DatagramPacket对象的getLength()方法,获取到数据长度
通过new String()包一下,获得String数据,参数:byte[]数组,0开始,length长度
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 接收端 * @author taoshihan * */ public class Receiver { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket(10000); byte[] buf=new byte[1024]; DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length); ds.receive(datagramPacket); InetAddress ip= datagramPacket.getAddress(); int port=datagramPacket.getPort(); byte[] resByte=datagramPacket.getData(); int length=datagramPacket.getLength(); String info=new String(resByte,0,length); System.out.println("来自:"+ip.getHostAddress()+":"+port+"说:"+info); } }
结果:
来自:100.66.217.80:56356说:Hello UDP
先运行接收端,此时程序会阻塞住,等待接收。。。
再运行发送端
接收到一次以后就会断,用while(true) 包一下,死循环但是会阻塞住,注意不要把创建DatagramSocket包进去
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网