两个重要的类:

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/DatagramPacket.html

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/DatagramSocket.html


 简单示例:

  1. package netProgram;
  2.  
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetSocketAddress;
  6.  
  7. /**
  8. * 发送端
  9. * 1.使用DatagramSocket 指定端口 创建发送端
  10. * 2.准备数据 准成字节数组
  11. * 3.封装成 DatagramPacket,需要指定目的地
  12. * 4.发送包裹 send(DatagramPacket packet)
  13. * 5.释放资源
  14. * */
  15. public class UDPTest2 {
  16. public static void main(String[] args) throws Exception {
  17. DatagramSocket client = new DatagramSocket(8888);//自身的端口号
  18. String data = "hello udp program!";
  19. byte[] datas = data.getBytes();
  20. //指定发往的目的地
  21. DatagramPacket packet = new DatagramPacket
  22. (datas, 0, datas.length,
  23. new InetSocketAddress("localhost", 9999));
  24. client.send(packet);
  25. client.close();
  26. }
  27. }
  1. package netProgram;
  2.  
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5.  
  6. /**
  7. * 接收端
  8. * 1.使用DatagramSocket 指定端口 创建接收端
  9. * 2.准备容器 封装成DatagramPacket
  10. * 3.阻塞式接收 packet receive(DatagramPacket packet)
  11. * 4.分析数据 byte[] getData()
  12. * 5.释放资源
  13. * */
  14. public class UDPTest {
  15. public static void main(String[] args) throws Exception {
  16. DatagramSocket server = new DatagramSocket(9999);
  17. byte[] container = new byte[64*1024];
  18. DatagramPacket packet = new DatagramPacket(container, 0,container.length);
  19. server.receive(packet);
  20.  
  21. byte[] data = packet.getData();
  22. System.out.println(new String(data));
  23. server.close();
  24. }
  25. }

发送对象:关键是要转换成字节数组

  1. package netProgram;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ObjectInputStream;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7.  
  8. /**
  9. * 接收端 1.使用DatagramSocket 指定端口 创建接收端 2.准备容器 封装成DatagramPacket 3.阻塞式接收 packet
  10. * receive(DatagramPacket packet) 4.分析数据 byte[] getData() 5.释放资源
  11. */
  12. public class UDPTest {
  13. public static void main(String[] args) throws Exception {
  14. DatagramSocket server = new DatagramSocket(9999);
  15. byte[] container = new byte[64 * 1024];
  16. DatagramPacket packet = new DatagramPacket(container, 0, container.length);
  17. server.receive(packet);
  18.  
  19. byte[] data = packet.getData();
  20. ByteArrayInputStream stream = new ByteArrayInputStream(data, 0, data.length);
  21. ObjectInputStream ois = new ObjectInputStream(stream);
  22. Person temp = (Person) ois.readObject();
  23. System.out.println(temp.getAge() + "--->" + temp.getName());
  24. server.close();
  25. }
  26. }
  1. package netProgram;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.ObjectOutputStream;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetSocketAddress;
  8.  
  9. /**
  10. * 发送端
  11. * 1.使用DatagramSocket 指定端口 创建发送端
  12. * 2.准备数据 准成字节数组
  13. * 3.封装成 DatagramPacket,需要指定目的地
  14. * 4.发送包裹 send(DatagramPacket packet)
  15. * 5.释放资源
  16. * */
  17. public class UDPTest2 {
  18. public static void main(String[] args) throws Exception {
  19. DatagramSocket client = new DatagramSocket(8888);//自身的端口号
  20. //String data = "hello udp program!";
  21. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  22. ObjectOutputStream oos = new ObjectOutputStream(stream);
  23. oos.writeObject(new Person(15, "john"));
  24. //byte[] datas = data.getBytes();
  25. byte[] datas = stream.toByteArray();
  26. //指定发往的目的地
  27. DatagramPacket packet = new DatagramPacket
  28. (datas, 0, datas.length,
  29. new InetSocketAddress("localhost", 9999));
  30. client.send(packet);
  31. client.close();
  32. }
  33. }

java_udp编程的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  3. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  4. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  5. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  6. UE4新手之编程指南

    虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...

  7. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  8. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  9. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

随机推荐

  1. 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays

    题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...

  2. JVM垃圾回收面试题

    Java垃圾回收有个经典面试题,什么时候,对什么对象,做了什么操作? 垃圾回收里涉及内容很多,要准确回答这个问题首先要先限定边界.分清楚虚拟机规范定义和不同虚拟机实现的差异.以工作中用到的hotspo ...

  3. 使用反射机制恢复xml文件表示的对象

    完成如下功能:1)有一个(任意)对象,里面有N个properties以及getter和setter方法2)有一个properties文件,有N个key,value来描述对象中property的值3)有 ...

  4. hdu2089(数位DP 递推形式)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. js中的call和apply方法

    call方法: 语法:call(thisObj,[arg1,arg2,arg3,...]); 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用 ...

  6. FluentData - 轻量级.NET ORM持久化技术解决方案

    官方地址:http://fluentdata.codeplex.com/ 官方教程:http://fluentdata.codeplex.com/documentation FluentData入门 ...

  7. Phpstorm安装和优化

    Phpstorm是php开发一个强大的IDE,但是它不是免费的需要注册码,而且界面是英文界面,对英文不太好的人有点不友好.所以这篇文章主要从phpstorm的破解和汉化来优化phpstorm. 1.首 ...

  8. 洛谷 P1966 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:∑(ai​−bi​)2 其中ai​ 表示 ...

  9. 题解报告:hdu 2058 The sum problem

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2058 问题描述 给定一个序列1,2,3,...... N,你的工作是计算所有可能的子序列,其子序列的总 ...

  10. Apusic中间件结合MyEclipse进行远程调试记录

    Apusic中间件结合MyEclipse进行远程调试记录. 在金蝶域中正常部署应用. 启动金蝶中间件时使用"startapusic -ds"命令. 在MyEclipse的Run-- ...