简单了解一下
客户端demo:
package demo_Socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
* 服务端,实现基于UDP的用户登陆
*
*/
public class UDP_Server {
public static void main(String[] args) {
try {
// 1.创建服务端DatagramSocket,并指定端口,如果不指定则使用默认端口
DatagramSocket socket = new DatagramSocket(8880);
// 2.创建字节数组与数据报,用于接收客户端发送的数据
byte[] data = new byte[1024];
// 数据报,指定数组与一次接收的长度
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
System.out.println("服务端已启动,正在等待客户端链接....");
// 3.接收客户端发送的数据,类似于监听,在未接收到数据之前会一直阻塞
socket.receive(packet);
// 读取到包的长度,如果设置为读取到数组的长度会有可能导致出现空字符
String info = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端说:" + info);
/*
* 向客户端响应信息
*/
// 1.定义客户端的地址,端口号,数据
// 获取客户地址
InetAddress address = packet.getAddress();
// 获取客户端的端口号
int port = packet.getPort();
// 定义数组包含要发送的信息
byte[] data2 = "欢迎使用服务端".getBytes();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
// 发送
socket.send(packet2);
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端:
package demo_Socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDP_cilent {
public static void main(String[] args) {
try {
// 1.定义服务器地址,端口号,数据
InetAddress address = InetAddress.getByName("localhost");
int port = 8880;
byte[] data = "用户名:admin;密码:123".getBytes();
// 2.创建数据报包含数据信息 数组,数组长度,地址,端口号
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
try {
// 3.创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket();
try {
// 4.发送数据
socket.send(packet);
/*
* 接收服务器端响应的数据
*/
// 1.创建数据报用于接收服务端响应的数据
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, 0, data2.length);
// 监视服务端的数据
socket.receive(packet2);
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说: " + reply);
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}