点击上方 IT牧场 ,选择 置顶或者星标
技术干货每日送达!
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();
}
}
其他
我花大价钱下载了一个jdk1.8
中文API,如果有需要的小伙伴可以公众号后台回复jdk8即可免费下载。毕竟咱们程序员的英语都不太好,看这个中文API就方便多了。
干货分享
最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!
•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》•007:全部•008:加技术群讨论
近期热文
•LinkedBlockingQueue vs ConcurrentLinkedQueue•解读Java 8 中为并发而生的 ConcurrentHashMap•Redis性能监控指标汇总•最全的DevOps工具集合,再也不怕选型了!•微服务架构下,解决数据库跨库查询的一些思路•聊聊大厂面试官必问的 MySQL 锁机制
关注我
喜欢就点个"在看"呗^_^