java网络编程(UDP)——简单的自动回复消息功能(女神自动回复SingleDog消息,可根据亲密的设置回复多少条数据)
UDP是UserDatagramProtocol的简称,是一种无连接的协议
UDP是无连接型协议,因而具有资源消耗小,处理速度快的优点,我们聊天大多就是使用的UDP协议。比如接下来的相互聊天的情况:(当然只是SingleDog一人说话,女神是自动回复)
1.服务端,接收聊天数据并显示聊天数据。
public class Goddess implements Runnable {
private static int number = 0;
//设置回复四次
private static int numbers = 4;
@Override
public void run() {
try {
test2();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void test2() throws Exception {
//设置端口号
int port = 10088;
DatagramSocket datagramSocket = new DatagramSocket(port);
byte[] bytes = new byte[1024 * 10];
int length = bytes.length;
DatagramPacket datagramPacket = new DatagramPacket(bytes, length);
datagramSocket.receive(datagramPacket);
byte[] data = datagramPacket.getData();
String string = new String(data);
InetAddress address = datagramPacket.getAddress();
String hostName = address.getHostName();
String hostAddress = address.getHostAddress();
//输出主机名
System.out.println(hostName);
//输出主机id
System.out.println(hostAddress);
//输出就收内容
System.out.println(string);
datagramSocket.close();
//等一秒回复消息
Thread.sleep(1000 * 1);
test1();
}
private static void test1() throws Exception {
Random random = new Random();
String string = null;
String[] strings = { "哦哦", "嗯嗯", "啊啊", "好的" };
int nextInt = random.nextInt(strings.length);
//判断是否达到了回复的最大次数
if (number > number) {
string = "女神回复:" + "睡觉去了,再见";
DatagramSocket datagramSocket1 = new DatagramSocket();
byte[] bytes = string.getBytes();
int length = bytes.length;
InetAddress address = InetAddress.getLocalHost();
int port = 10089;
DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length, address, port);
datagramSocket1.send(datagramPacket1);
datagramSocket1.close();
} else {
number++;
string = "女神回复:" + strings[nextInt];
DatagramSocket datagramSocket1 = new DatagramSocket();
byte[] bytes = string.getBytes();
int length = bytes.length;
InetAddress address = InetAddress.getLocalHost();
int port = 10089;
DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length, address, port);
datagramSocket1.send(datagramPacket1);
datagramSocket1.close();
//如果没有达到规定回复次数就继续循环调用
test2();
}
}
}
2.客户端,发送数据,收到服务端的自动回复。
public class Single {
private static int number = 0;
//设置回复四次
private static int numbers = 4;
public static void main(String[] args) throws Exception {
//先启动服务端就收数据,再启动客户端发送数据
Goddess goddess = new Goddess();
Thread thread = new Thread(goddess);
thread.start();
test2();
}
private static void test2() throws Exception {
Scanner scanner = new Scanner(System.in);
// 四次对话后就不再输入,也不再调用test1()方法进行等待接收。
if (number < numbers) {
number++;
System.out.println("请身为单身狗的你输入想对女神说的话:");
String string = scanner.next();
System.out.println();
DatagramSocket datagramSocket = new DatagramSocket();
byte[] bytes = string.getBytes();
int length = bytes.length;
InetAddress address = InetAddress.getLocalHost();
int port = 10088;
DatagramPacket datagramPacket = new DatagramPacket(bytes, length, address, port);
datagramSocket.send(datagramPacket);
datagramSocket.close();
// 输出消息以后马上进入等待消息的状态
test1();
} else {
//对方已经拉黑您了!!!
System.out.println("你亲爱的女神已经睡觉了,请勿打扰她睡觉");
scanner.close();
}
}
private static void test1() throws Exception {
int port = 10089;
DatagramSocket datagramSocket1 = new DatagramSocket(port);
byte[] bytes = new byte[1024 * 10];
int length = bytes.length;
DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length);
datagramSocket1.receive(datagramPacket1);
byte[] data = datagramPacket1.getData();
String string = new String(data);
InetAddress address1 = datagramPacket1.getAddress();
String hostName = address1.getHostName();
String hostAddress = address1.getHostAddress();
System.out.println(hostName);
System.out.println(hostAddress);
System.out.println(string);
datagramSocket1.close();
Thread.sleep(1000 * 1);
test2();
}
}
运行效果截图: