题目
使用UDP协议进行服务器和客户端之间的通信,将客户端发送的消息用键盘录入
分析
UDP协议不需要建立连接,因此在开启程序的时候需要先开启服务器,之后再开启客户端,否则将不会发送成功,详细步骤在代码中已经注释。
程序代码
服务器接收消息
package com.company.deno;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class server {
public static void main(String[] args) throws IOException {
//创建UDP服务器对象
DatagramSocket ds = new DatagramSocket(8888);
byte[] bytes = new byte[1024];
//创建数据报包,作用用来接收数据
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//接受数据
System.out.println("服务器已开启,等待连接...");
ds.receive(dp);//服务器在这里停着呢 等待接受数据
//取出数据包中的数据
byte[] data = dp.getData();
int length = dp.getLength();
String message = new String(data, 0, length);
//获取发送者的ip
String ip = dp.getAddress().getHostAddress();
System.out.println("IP: " + ip + '\n'+"消息:" + message);
ds.close();
}
}
客户端发送消息
package com.company.deno;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class client {
public static void main(String[] args) throws IOException {
//创建客户端对象
DatagramSocket ds = new DatagramSocket();
//创建字节数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入消息:");
String str = sc.nextLine();
byte[] bytes = str.getBytes();
int length = bytes.length;
//获取ip地址对象
InetAddress inetAddress = InetAddress.getByName("DESKTOP-54FG57A");
//创建数据报包
DatagramPacket dp = new DatagramPacket(bytes, length, inetAddress, 8888);
//发送数据
ds.send(dp);
ds.close();
}
}