两个重要的类:

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


 简单示例:

package netProgram;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress; /**
* 发送端
* 1.使用DatagramSocket 指定端口 创建发送端
* 2.准备数据 准成字节数组
* 3.封装成 DatagramPacket,需要指定目的地
* 4.发送包裹 send(DatagramPacket packet)
* 5.释放资源
* */
public class UDPTest2 {
public static void main(String[] args) throws Exception {
DatagramSocket client = new DatagramSocket(8888);//自身的端口号
String data = "hello udp program!";
byte[] datas = data.getBytes();
//指定发往的目的地
DatagramPacket packet = new DatagramPacket
(datas, 0, datas.length,
new InetSocketAddress("localhost", 9999));
client.send(packet);
client.close();
}
}
package netProgram;

import java.net.DatagramPacket;
import java.net.DatagramSocket; /**
* 接收端
* 1.使用DatagramSocket 指定端口 创建接收端
* 2.准备容器 封装成DatagramPacket
* 3.阻塞式接收 packet receive(DatagramPacket packet)
* 4.分析数据 byte[] getData()
* 5.释放资源
* */
public class UDPTest {
public static void main(String[] args) throws Exception {
DatagramSocket server = new DatagramSocket(9999);
byte[] container = new byte[64*1024];
DatagramPacket packet = new DatagramPacket(container, 0,container.length);
server.receive(packet); byte[] data = packet.getData();
System.out.println(new String(data));
server.close();
}
}

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

package netProgram;

import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket; /**
* 接收端 1.使用DatagramSocket 指定端口 创建接收端 2.准备容器 封装成DatagramPacket 3.阻塞式接收 packet
* receive(DatagramPacket packet) 4.分析数据 byte[] getData() 5.释放资源
*/
public class UDPTest {
public static void main(String[] args) throws Exception {
DatagramSocket server = new DatagramSocket(9999);
byte[] container = new byte[64 * 1024];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
server.receive(packet); byte[] data = packet.getData();
ByteArrayInputStream stream = new ByteArrayInputStream(data, 0, data.length);
ObjectInputStream ois = new ObjectInputStream(stream);
Person temp = (Person) ois.readObject();
System.out.println(temp.getAge() + "--->" + temp.getName());
server.close();
}
}
package netProgram;

import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress; /**
* 发送端
* 1.使用DatagramSocket 指定端口 创建发送端
* 2.准备数据 准成字节数组
* 3.封装成 DatagramPacket,需要指定目的地
* 4.发送包裹 send(DatagramPacket packet)
* 5.释放资源
* */
public class UDPTest2 {
public static void main(String[] args) throws Exception {
DatagramSocket client = new DatagramSocket(8888);//自身的端口号
//String data = "hello udp program!";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(stream);
oos.writeObject(new Person(15, "john"));
//byte[] datas = data.getBytes();
byte[] datas = stream.toByteArray();
//指定发往的目的地
DatagramPacket packet = new DatagramPacket
(datas, 0, datas.length,
new InetSocketAddress("localhost", 9999));
client.send(packet);
client.close();
}
}

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. Java总结基础知识

    权限关键字: public:可以被所有其他类所访问,不同的包 protected:当前类的成员.同一个包中.不同包中对子类可见父类protected,继承类 default:同一包中的类可以访问,声明 ...

  2. 【SDOI 2011】染色

    [题目链接] 点击打开链接 [算法] 树链剖分 [代码] 本题,笔者求最近公共祖先并没有用树链剖分“往上跳”的方式,而是用倍增法.笔者认为这样比较好写,代码可读性 比较高 此外,笔者的线段树并没有用懒 ...

  3. Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)

    创建: 2018/02/28 完成: 2018/03/04 更新: 2018/05/03 给主要标题加上英语, 方便页内搜索 [任务表]TODO 范围型(Range)与Stride型  与范围运算符相 ...

  4. 使用vmware12安装Ubuntu 遇到的两个问题和解决

    1.need the x86-64 cpu,but only detected the xxx cpu. 这是因为bios中的virtual function 是 disabled,改为enabled ...

  5. oracle ORA-01704: string literal too long问题分析

    今天使用sql在oracle直接insert update一个表时,出现ORA-01704: string literal too long的错误,我们的sql是 update mall_config ...

  6. nginx_uWSGI_django_virtualenv_supervisor发布web服务器

    nginx_uWSGI_django_virtualenv_supervisor发布web服务器 nginx 导论 123456789101112131415161718192021222324252 ...

  7. Kubernetes集群认证

    1.集群搭建:https://www.kubernetes.org.cn/3808.html 2.集群验证:https://www.kubernetes.org.cn/1861.html

  8. poj 1511 Invitation Cards spfa 邻接矩阵

    题目链接: http://poj.org/problem?id=1511 题目大意: 这道题目比较难理解,我读了好长时间,最后还是在队友的帮助下理解了题意,大意就是,以一为起点,求从一到其他各点的最短 ...

  9. 数据结构之splay树

    https://www.bilibili.com/video/av19879546 https://blog.csdn.net/u014634338/article/details/42465089 ...

  10. 博弈 HDOJ 4371 Alice and Bob

    题目传送门 题意:Alice和 Bob轮流写数字,假设第 i 次的数字是S[i] ,那么第 i+1 次的数字 S[i+1] = S[i] + d[k] 或 S[i] - d[k],条件是 S[i+1] ...