UDP简述
UDP是一种无连接传输协议(网络中传输的数据格式在网络编程中就被称作协议)。该协议称为用户数据报协议。
UDP特点
1.无连接。只要知道对端的IP和端口号就可以直接进行传输而不需要建立连接(例如生活中的发短信,只管发,不在意对方是否能收到)
2.不可靠。没有确认机制,没有重传机制。(例如打微信电话时候网络不稳定或是信号不好,听不清楚对方说什么,这就是因为丢失数据包导致的)
3.速度快。UDP是IOS模型传输层其中之一,除此之外还有TCP,TCP控制相对来说比较复杂,其中使用到的机制包括三次握手、流量控制、滑动窗口、序列号、确认号等,链路比较多。而UDP是无连接的,链路的开销比较小所以速度快
代码实现
客户端
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
try {
//创建发送端套接字
DatagramSocket socket = new DatagramSocket();
//指定ip
InetAddress ip = InetAddress.getByName("localhost");
//指定一个端口
int port = 9999;
//创建一个容器
byte data[];
while(true){
System.out.println("你发送的东西");
String str = sca.next();
//把数据放进容器
data = str.getBytes();
//打包数据
DatagramPacket packet = new DatagramPacket(data, data.length,ip,port);
//发送数据报包
socket.send(packet);
if (str.equals("exit")){
break;
}
}
//释放资源
socket.close();
} catch (SocketException | UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器
import java.io.IOException;
import java.net.*;
public class Server{
public static void main(String[] args) {
try {
//创建套接字并将其绑定到本地主机上的指定端口。
DatagramSocket socket = new DatagramSocket(9999);
//创建接受数据的容器
byte []data = new byte[1024];
//创建一个接受数据的数据包
DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
while(true){
//开始接收数据
socket.receive(datagramPacket);
//解析数据
String str = new String(datagramPacket.getData(),0, datagramPacket.getLength());
//接收到的数据
System.out.println(datagramPacket.getAddress()+"发送的消息:"+str);
if (str.equals("exit")){
break;
}
}
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
PS:先启动服务器再启动客户端