Internet 的传输层有两个主要协议
TCP(传输控制协议,Transport Controll Protocol)
UDP(用户数据报协议,User Data Protocol)
Udp程序,基于数据报的网络编程实现。数据包就好比发送的短消息一样,客户端是否接收到与发送者无关。
代码:
这是服务器端,属于消息发送方
package com.xxx.net.udp;
import java.io.IOException;
import java.net.*;
/**
* @author zhangzhaopeng
* @date 2020/3/29 11:45 下午
*/
public class UdpServerDemo {
public static void main(String[] args) throws IOException {
DatagramSocket server = new DatagramSocket(8888); // 服务端绑定(本地)地址与端口 bind()
server.connect(new InetSocketAddress("localhost", 8889)); // 连接远程客户端地址
String msg = "start...";
DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.length()); // 定义发送消息主体
server.send(packet); // 消息发送
packet.setData("Hello world !".getBytes());
server.send(packet);
packet.setData("bye".getBytes());
server.send(packet);
System.out.println("over...");
server.close(); // 关闭
}
}
这是客户端,属于消息接收方
package com.xxx.net.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* @author zhangzhaopeng
* @date 2020/3/29 11:36 下午
*/
public class UdpClientDemo {
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket(8889); // 客户端 绑定本地地址与端口号(与服务器不同)
byte[] bytes = new byte[1024]; // 用于接受数据
DatagramPacket packet = new DatagramPacket(bytes, bytes.length); // 定义发送消息主体 客户端不需要远程连接,是被动接受者
boolean flog = true; // 专门设置一个bool,使while可控
while (flog){
client.receive(packet); // 接收数据 并保存在packet中
String str = new String(bytes, 0, packet.getLength());
System.out.println("Receive data:" + str); // 打印接收内容
if ("bye".equalsIgnoreCase(str.trim())){
flog = false; // 如果接受到 "bye",则结束
}
}
System.out.println("over...");
client.close(); // 对于资源连接,要记得关闭!!
}
}
DatagramPacket用于保存数据包内容
DatagramSocket 用于数据报的传输(发送与接收)