千家信息网

12.7-全栈Java笔记:Java网络编程(五)

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,UDP通讯的实现1.DatagramSocket:用于发送或接收数据包当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSocket对象,在客户端产生一个DatagramSocket
千家信息网最后更新 2026年11月03日12.7-全栈Java笔记:Java网络编程(五)

UDP通讯的实现

1.DatagramSocket:用于发送或接收数据包

当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSocket对象,在客户端产生一个DatagramSocket对象。服务器端的DatagramSocket将DatagramPacket发送到网络上,然后被客户端的DatagramSocket接收。

DatagramSocket有两种构造函数。一种是无需任何参数的,常用于客户端。另一种需要指定端口,常用于服务器。

常用方法:send、receive、 close

2.DatagramPacket:数据容器(封包)的作用

常用方法:构造函数、getAddrress(获取发送或接收方计算机的IP地址)、getData(获取发送或接收的数据)、setData(设置发送的数据)

3.UDP通信编程基本步骤:

a)创建客户端的DatagramSocket,创建时,定义客户端的监听端口

b)创建服务器端的DatagramSocket,创建时,定义服务器端的监听端口

c)在服务器端定义DatagramPacket对象,封装待发送的数据包。

d)服务器端将数据包发送出去

e)客户端接收数据包

【示例1】客户端与服务器端单向通信之客户端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class Client {

public static void main(String[] args) throws Exception {

byte[] b = "aaaa".getBytes();

//必须告诉数据包要发到哪里去

DatagramPacket dp = new DatagramPacket(b,b.length,new InetSocketAddress("localhost",8999));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

【示例2】客户端与服务器端单向通信之服务器端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class Server {

public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket(8999);

byte[] b = new byte[1024];

DatagramPacket dp = new DatagramPacket(b,b.length);

ds.receive(dp); //阻塞式方法

String string = new String(dp.getData(),0,dp.getLength()); //dp.getLength()返回实际收到的数据的字节数

System.out.println(string);

ds.close();

}

}

通过ByteArrayInputStream、ByteArrayOutputStream可以传递基本类型数据。

【示例3】客户端

public class Client {

public static void main(String[] args) throws Exception {

long n = 2000L;

ByteArrayOutputStream bos = new ByteArrayOutputStream();

DataOutputStream dos = new DataOutputStream(bos);

dos.writeLong(n);

byte[] b = bos.toByteArray();

//必须告诉数据包要发到哪里去

DatagramPacket dp = new DatagramPacket(b,b.length,new InetSocketAddress("localhost",8999));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

【示例4】服务器端

public class Server {

public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket(8999);

byte[] b = new byte[1024];

DatagramPacket dp = new DatagramPacket(b,b.length);

ds.receive(dp); //阻塞式方法

ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData());

DataInputStream dis = new DataInputStream(bis);

System.out.println(dis.readLong());

ds.close();

}

}

通过ByteArrayInputStream、ByteArrayOutputStream可以传递对象。

【示例5】Person类(客户端与服务器端都需要存在Person类)

class Person implements Serializable{

int age;

String name;

public Person(int age, String name) {

super();

this.age = age;

this.name = name;

}

}

【示例6】客户端

public class Client {

public static void main(String[] args) throws Exception {

Person person = new Person(20,"aa");

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(bos);

oos.writeObject(person);

byte[] b = bos.toByteArray();

//必须告诉数据包要发到哪里去

DatagramPacket dp = new DatagramPacket(b,b.length,new InetSocketAddress("localhost",8999));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

【示例7】服务器端

public class Server {

public static void main(String[] args) throws Exception {

DatagramSocket ds = new DatagramSocket(8999);

byte[] b = new byte[1024];

DatagramPacket dp = new DatagramPacket(b,b.length);

ds.receive(dp); //阻塞式方法

ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData());

ObjectInputStream ois = new ObjectInputStream(bis);

Person person = (Person) ois.readObject();

System.out.println(person.name);

ds.close();

}

}




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop



数据 服务器 服务 客户 客户端 示例 端口 端的 方法 对象 笔记 工程师 机器 通信 阻塞 高级 函数 前端 单向 工程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络科技有限互联网 互联网科技公司电话 杭州互联网科技公司 美国互联网黑科技 菲比寻常互联网科技 碳银互联网科技有限公司 科技类的互联网平台 互联网科技生活的内容 华脉科技工业互联网产品 哈尔滨新华互联网科技学院 欧洲十大科技互联网公司 贵州叶脉互联网科技有限公司所属行业 移动互联网年度科技创新 2021互联网科技公司排名 上海钢联属于互联网科技股吗 广州富喜互联网络科技 有人说阿里系是互联网科技企业 昆明中奇联合互联网科技 长沙渺峰互联网科技有限公司 第三届互联网大会安防黑科技 互联网科技园 致骋互联网科技 互联网科技博客 互联网金融中的现代科技 互联网和黑科技的看法 阿大互联网科技有限公司 互联网5g黑科技有哪些 亳州好赞互联网科技有限公司 四川慕妮娅互联网科技有限公司 科技互联网的核心竞争力
0