2. 使用基于UDP的Java Socket编程,完成在线咨询功能: (1)客户向咨询人员咨询。 (2)咨询人员给出回答。 (3)客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员。 AskServer.java public class AskServer { public static void main(String[] args) { // 创建DatagramSocket,发送接收数据都依赖他 (1) ; try { socket = new DatagramSocket(8888); (2) ;//输入 while (true) { // 准备一个空的数据包,用来接收数据 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); // 接收数据使用空的数据包 (3) ; // 输出信息 String info = new String(packet.getData(), 0, packet.getLength()); System.out.println("客户端请求:" + info); // 判断是否退出 if ("bye".equals(info)) { break; } // 发送数据 String result = input.nextLine(); (4) ; DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, packet.getAddress(), packet.getPort()); socket.send(packet2); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { (5)System.out.println("客户端已退出"); socket.close() ; } } }
时间: 2024-03-29 11:41:51 浏览: 179
AskClient.java
public class AskClient {
public static void main(String[] args) {
// 创建DatagramSocket,发送接收数据都依赖他
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
Scanner input = new Scanner(System.in);
while (true) {
// 获取要发送的信息
String request = input.nextLine();
byte[] buf = request.getBytes();
// 发送数据
DatagramPacket packet = new DatagramPacket(buf, buf.length,
InetAddress.getByName("localhost"), 8888);
socket.send(packet);
// 准备一个空的数据包,用来接收数据
byte[] buf2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length);
// 接收数据使用空的数据包
socket.receive(packet2);
// 输出信息
String response = new String(packet2.getData(), 0, packet2.getLength());
System.out.println("咨询人员回答:" + response);
// 判断是否退出
if ("bye".equals(request)) {
break;
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("咨询结束");
socket.close();
}
}
}
解释:
1. 创建DatagramSocket实例,用于发送和接收数据。
2. 使用Scanner从控制台获取客户端要发送的信息。
3. 将要发送的信息转成字节数组,并创建DatagramPacket实例,指定数据包的目标地址和端口号。
4. 发送数据包。
5. 创建一个空的数据包,用于接收数据。
6. 接收数据包。
7. 将接收到的数据转成字符串,并输出到控制台。
8. 判断客户端是否要退出,如果是,则退出循环。
9. 循环结束后,关闭DatagramSocket。
阅读全文