Java网络编程UDP
1.类 DatagramSocket和 DatagramPacket实现了基于UDP协议网络程序。2.UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
3. DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
4.UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接
UDP网络编程原理
public class UDP1 { public static void main(String[] args) throws IOException { //创建一个DatagramSocket对象,准备在9999接收 DatagramSocket datagramSocket = new DatagramSocket(9999); //构建一个datagramPacket对象,准备接收数据 byte[] buf = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); //调用接口方法,将通过网络传输DatagramPacket对象 System.out.println("等待接收数据"); datagramSocket.receive(datagramPacket); //可以把packet进行拆包显示 int length = datagramPacket.getLength(); byte[] data = datagramPacket.getData(); System.out.println(new String(data,0,length)); //发送数据 byte[] data2 = "好的明天见".getBytes(); DatagramPacket datagramPacket1 = new DatagramPacket(data2, data2.length, InetAddress.getByName("192.168.91.1"),9998); datagramSocket.send(datagramPacket1); //关闭资源 datagramSocket.close(); } }
public class UDP2 { public static void main(String[] args) throws IOException { //创建一个DatagramSocket对象,准备发送数据,发送端也可以接收数据 DatagramSocket datagramSocket = new DatagramSocket(9998); //构建一个datagramPacket对象,准备接收数据 byte[] buf = "你好,切火锅嘛?".getBytes(); DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.91.1"),9999); //调用接口方法,将通过网络传输DatagramPacket对象 datagramSocket.send(datagramPacket); //接收数据 byte[] data = new byte[1024]; DatagramPacket datagramPacket1 = new DatagramPacket(data, data.length); datagramSocket.receive(datagramPacket1); int length = datagramPacket1.getLength(); byte[] data1 = datagramPacket1.getData(); System.out.println(new String(data1,0,length)); //关闭资源 datagramSocket.close(); } }
案例
服务器 public class TCP1 { @SuppressWarnings({"all"}) public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); System.out.println("等待客户端连接"); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); byte[] b = new byte[100]; int len=0; String downLoadname=""; while ((len= inputStream.read(b))!=-1){ downLoadname = new String(b,0,len); } System.out.println("查找的文件名为:"+downLoadname); String resFilename = ""; if ("腰鼓".equals(downLoadname)){ resFilename = "src\\腰鼓.mp3"; }else if ("稻香".equals(downLoadname)){ resFilename = "src\\腰鼓.mp3"; } BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(resFilename)); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream()); byte[] b1 = new byte[10240]; int len1=0; while ((len= bufferedInputStream.read(b1))!=-1){ bufferedOutputStream.write(b1,0,len); //bufferedOutputStream.flush(); } socket.shutdownOutput(); inputStream.close(); bufferedOutputStream.close(); socket.close(); serverSocket.close(); } }
客户端 public class TCP2 { @SuppressWarnings({"all"}) public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); System.out.println("请输入下载的文件名称:"); String downLoadFilename = scanner.next(); Socket socket = new Socket(InetAddress.getLocalHost(),8888); OutputStream outputStream = socket.getOutputStream(); outputStream.write(downLoadFilename.getBytes()); socket.shutdownOutput(); String destFile="d:\\"+downLoadFilename+".mp3"; BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream()); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destFile)); byte[] b = new byte[10240]; int len=0; while ((len= bufferedInputStream.read(b))!=-1){ bufferedOutputStream.write(b,0,len); //bufferedOutputStream.flush(); } System.out.println("文件下载成功!"); bufferedOutputStream.close(); bufferedInputStream.close(); socket.close(); outputStream.close(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南