package com.ln.practice;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
//实现老师和学生的双向通信
//主线:输入的内容转换为字节数组的形式
public class Student {
public static void main(String[] args) throws IOException {
//创建对象,此处需要指明端口,因为我要实现双方的通信,有发送有接收
//如果只发送,就不需要写端口值。
DatagramSocket socket = new DatagramSocket(8000);
System.out.println("学生端");
//构造方法里面有字节数组,所以需要提前准备字节数组
while(true) {
byte[] buf = new byte[1024];
//输入内容
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
//把输入的内容转换为字节数组
buf = input.getBytes();
//udp协议是通过数据包来发送数据的,所以要创建数据包对象,把输入的内容打包
DatagramPacket packet = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),9000);
//发送
socket.send(packet);
//如果发送bye,跳出循环
if(input.equals("bye")) {
break;
}
//接收老师的信息
//准备字节数组
byte[] data = new byte[1024];
//创建数据包对象
DatagramPacket packet1 = new DatagramPacket(data, data.length);
//接收数据
socket.receive(packet1);
//分析数据
byte[] result = packet1.getData();
//转换成字符串
String print_str = new String(result);
System.out.println("老师说"+print_str);
}
//关闭流
socket.close();
}
}
以上是学生端代码,具体流程可参考注释
以下是老师端代码,具体流程可参考注释
package com.ln.practice;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class Teacher {
public static void main(String[] args) throws IOException {
//创建对象,此处需要指明端口,因为我要实现双方的通信,有接收有发送
DatagramSocket socket = new DatagramSocket(9000);
System.out.println("老师端");
while(true) {
//接收学生的信息
//准备字节数组
byte[] data = new byte[1024];
//创建数据包对象
DatagramPacket packet1 = new DatagramPacket(data, data.length);
//接收数据
socket.receive(packet1);
//分析数据
byte[] result = packet1.getData();
//转换成字符串
String print_str = new String(result);
System.out.println("学生说"+print_str);
//如果发送bye,跳出循环
if(print_str.startsWith("bye")) {
break;
}
//发送数据
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
//把输入的内容转换为字节数组
byte[] buf = input.getBytes();
//udp协议是通过数据包来发送数据的,所以要创建数据包对象,把输入的内容打包
DatagramPacket packet = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8000);
//发送
socket.send(packet);
}
//关闭流
socket.close();
}
}