手撸实现UDP和TCP通信
时间:2022-07-22
本文章向大家介绍手撸实现UDP和TCP通信,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
UDP
UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java.net包下提供了两个类DatagramPacket和DatagramSocket来实现UDP通信。这两个类可以这样理解,DatagramSocket是路,DatagramPacket路上装有人的车。也就是DatagramSocket决定了通信目标,DatagramPacket则代表封装好的数据。
UDP的特性决定了UDP协议的应用场景,在我身边最常见的应用场景就是物联网设备与服务端的通信。
UDPClient实现
public class UDPClient {
public static void main(String[] args) throws Exception {
byte[] data = "我是客户端,我发送了一条消息".getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(data,data.length,address,8888);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
byte[] message = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(message,message.length);
socket.receive(packet1);
String replyContent = new String(message,0,message.length);
System.out.println("UDPClient 接收到了消息:"+replyContent);
socket.close();
}
}
UDPServer实现
public class UDPServer {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data,data.length);
socket.receive(packet);
String message = new String(data,0,packet.getLength());
System.out.println("UDPServer 接收到了消息:"+message);
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] replyContent = "我是服务端,我回复了一条消息".getBytes();
DatagramPacket packet1 = new DatagramPacket(replyContent, replyContent.length, address, port);
socket.send(packet1);
socket.close();
}
}
TCP
TCP是一种面向连接的服务,经过三次握手建立连接,通过传输字节流的方式进行通信。因此可以保证消息的完整性。同样,在java.net包下也提供了两个包Socket和ServerSocket来实现TCP通信。
TCPClient
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost",8081);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
String data = "我是客户端,我发了一条消息";
out.writeUTF(data);
DataInputStream in = new DataInputStream(socket.getInputStream());
String message = in.readUTF();
System.out.println("TCPClient:"+message);
socket.close();
}
}
TCPServer
public class TCPServer {
public static void main(String[] args) throws Exception{
ServerSocket serverSocket = new ServerSocket(8081);
Socket socket = serverSocket.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
String message = in.readUTF();
System.out.println("TCPServer:"+message);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("我是服务器,我回复了一条消息");
socket.close();
serverSocket.close();
}
}
- JSP面试题都在这里
- Java基础-07(01).总结private,this,封装,static,成员方法变量,局部变量匿名对象
- HTTP就是这么简单
- 重温二分查找算法(r4笔记第66天)
- 【不用框架】文件上传和下载
- JSP第七篇【简单标签、应用、DynamicAttribute接口】
- Java基础-07(02).总结private,this,封装,static,成员方法变量,局部变量匿名对象
- 通过shell脚本快速定位active session问题(r4笔记第65天)
- 01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层
- JSP第六篇【自定义标签之传统标签】
- 过滤器监听器面试题都在这里
- 02 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之Service层
- JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
- java中的序列化 (r4笔记第64天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法