简单的基于UDP的客户端和服务端通信:
服务端代码:
package love.jimo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer {
/*
* 服务端
* */
public static void main(String[] args) throws IOException {
/*
* 接收客户端发送的数据
*/
//1.创建服务器端的socket,指定端口9000,抛异常
DatagramSocket socket = new DatagramSocket(9000);
//2.创建数据报,用于接收客户端的数据
//首先创建一个字节数组并指定大小
byte [] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
System.out.println("=========服务器启动,监听中=========");
//3.接收客户端的数据,抛异常
socket.receive(packet);
//4.读取数据
String info = new String(data,0,packet.getLength());
System.out.println("收到客户端的消息为:"+info);
/*
* 向客户端发送数据
*/
//1.找到客户端的地址,端口号,数据
InetAddress address = packet.getAddress();
int port = packet.getPort();
System.out.println("port="+port);
byte[]data_out = "欢迎你".getBytes();
//2.创建数据报
DatagramPacket packet_out = new DatagramPacket(data_out, data_out.length, address, port);
//3.发送给客户端
socket.send(packet_out);
//4.关闭资源
socket.close();
}
}
客户端代码:
<span style="font-size:14px;">package love.jimo;
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 UDPClient {
/*
* 客户端
*/
public static void main(String[] args) throws IOException {
/*
* 向服务端发送数据
*/
//1.对应服务器的地址,抛异常
InetAddress address = InetAddress.getByName("localhost");
System.out.println("address="+address);
//2.端口号,数据
int port = 9000;
byte []data_out = "用户名:jimo;密码:123".getBytes();//字符串转字节数组
//3.创建数据报
DatagramPacket packet = new DatagramPacket(data_out, data_out.length, address,port);
//4.创建socket对象
DatagramSocket socket = new DatagramSocket();
//5.发送给服务器
socket.send(packet);
/*
* 接收服务端的响应
*/
//1.创建数据报
byte[]data_in = new byte[1024];
DatagramPacket packet_in = new DatagramPacket(data_in, data_in.length);
//2.接收数据
socket.receive(packet_in);
//3.读取数据
String in = new String(data_in,0,packet_in.getLength());
System.out.println("收到服务端的回复为:"+in);
//4.关闭资源
socket.close();
}
}</span><strong style="font-size:18px;">
</strong>
注意的问题:
我在代码中输出了客户端的端口和服务端的地址:
第一次运行结果:
第二次运行:
客户端端口是变化的,这也很好理解,因为客户端毕竟不止一个嘛