Java基础教程——UDP编程
UDP:User Datagram Protocol,用户数据报协议
服务端:
import java.net.*;
import java.io.*;
public class UdpServer {
public static final int PORT = 30000;
// 每个数据报最大为4K
private static final int DATA_LEN = 4096;
// 接收网络数据的字节数组
byte[] buff_in = new byte[DATA_LEN];
// 以指定字节数组创建准备接受数据的DatagramPacket对象
private DatagramPacket packet_in = new DatagramPacket(buff_in, buff_in.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket packet_out;
public void start() throws IOException {
try (
// 创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket(PORT)) {
// 采用循环接受数据
while (true) {
// 读取Socket中的数据,读到的数据放入inPacket封装的数组里。
socket.receive(packet_in);
// 判断inPacket.getData()和inBuff是否是同一个数组
System.out.println(buff_in == packet_in.getData());
// 将接收到的内容转成字符串后输出
String _sIn = new String(buff_in, 0, packet_in.getLength());
System.out.println("服务器端:" + _sIn);
if ("shutdown".equals(_sIn)) {
break;
}
// 从字符串数组中取出一个元素作为发送的数据
byte[] sendData = ("服务器收到:" + _sIn).getBytes();
// 创建DatagramPacket作为回复
SocketAddress addr = packet_in.getSocketAddress();
packet_out = new DatagramPacket(sendData, sendData.length, addr);
// 发送数据
socket.send(packet_out);
}
System.out.println("=====服务器关闭=====");
}
}
public static void main(String[] args) throws IOException {
new UdpServer().start();
}
}
客户端:
import java.net.*;
import java.io.*;
import java.util.*;
public class UdpClient {
// 定义发送数据报的目的地
public static final int DEST_PORT = 30000;
public static final String DEST_IP = "127.0.0.1";
// 定义每个数据报的最大大小为4K
private static final int DATA_LEN = 4096;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 创建接受回复数据的DatagramPacket对象
private DatagramPacket packet_in = new DatagramPacket(inBuff, inBuff.length);
// 定义一个用于发送的DatagramPacket对象
private DatagramPacket packet_out = null;
public void start() throws IOException {
try (DatagramSocket socket = new DatagramSocket()) {
// 初始化发送用的DatagramSocket
InetAddress ip = InetAddress.getByName(DEST_IP);
packet_out = new DatagramPacket(new byte[0], 0, ip, DEST_PORT);
// 创建键盘输入流
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据");
// 不断读取键盘输入
while (sc.hasNextLine()) {
String sUserInput = sc.nextLine();
if ("exit".equals(sUserInput)) {
break;
}
// 输入的字符串→字节数组
byte[] buff = sUserInput.getBytes();
// 设置发送用的DatagramPacket里的字节数据
packet_out.setData(buff);
// 发送数据报
socket.send(packet_out);
// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。
socket.receive(packet_in);
System.out.println(new String(inBuff, 0, packet_in.getLength()));
System.out.println("请输入数据:");
}
System.out.println("===Client ENd===");
}
}
public static void main(String[] args) throws IOException {
new UdpClient().start();
}
}
Java基础教程——UDP编程的更多相关文章
- Java基础教程——Socket编程
Socket通常也称作"套接字",用于描述IP地址和端口,可以用来实现不同虚拟机或不同计算机之间的通信. --百度百科 套接字允许应用程序插入到网络中,并与插入到网络中的其他应用程 ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- Java基础教程:面向对象编程[2]
Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...
- Java基础教程:面向对象编程[1]
Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...
- Java基础教程:JDBC编程
Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...
- Java基础教程:面向对象编程[3]
Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- Java基础教程:泛型基础
Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...
- Java基础教程:多线程基础(1)——基础操作
Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...
随机推荐
- C 语言编程习惯总结
笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 引言 编程习惯的培养需要的是一个长期的过程,需要不断地总结,积累,并且我们需要从意识上认识其重要性,一个良好的编 ...
- A*算法的有关知识--例子:最短路径问题
前置知识 定义1,g(n)=从树根到节点n的代价.当算法处理到某个节点时,g(n)是可以精确计算的. 定义2,h*(n)=从节点n到目标节点的优化路径的代价.一般不可知. 定义3,f*(n)=g(n) ...
- Luogu P4957 [COCI2017-2018#6] Alkemija
题意 有 \(n\) 种已知物质,现在手上有 \(m\) 种,每种无限多个.已知 \(k\) 种反应,每种可以将一些反应物变成一些生成物.求经过这些反应过后最多可以有多少种不同的物质. \(\text ...
- mysql处理数据库事务
数据库事务 关注公众号"轻松学编程"了解更多. 1.概念 执行批量操作时,这些操作作为一个整体,要么全部成功,要么全部失败.如银行转账,己方扣钱.对方加钱,这两个操作是一个整体 ...
- #10051 Nikitosh 和异或
Nikitosh 和异或 其实题意已经简单的不能再简单了,所以就不讲了. 因为题目中 \(1\leq l_1 \leq r_1 <l_2 \leq r_2\leq N\),所以显然对于最终答案, ...
- Python Tkinter小实例——模拟掷骰子
什么是Tkinter? Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安 ...
- mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- Oracle(第二天)
一.外键(foreign key):constraint , refenerces 例如:sno number(7) constraint fk_sno references student(sno) ...
- Mycat分库分表(一)
随着业务变得越来越复杂,用户越来越多,集中式的架构性能会出现巨大的问题,比如系统会越来越慢,而且时不时会宕机,所以必须要解决高性能和可用性的问题.这个时候数据库的优化就显得尤为重要,在说优化方案前,先 ...
- 关于java和JS中的lastIndexOf方法的误解。
今天看JS的数组的lastIndexOf()方法,看书上的例子,怎么看都觉得不对劲.后来详细读了几遍解释,用java也测试了下,才发现,之前的理解完全是错误的. 上例子: String nums=&q ...