Java双工通讯是指在一个连接中,允许数据在两个方向上同时传输,即双向通信。在Java中,我们可以使用Socket和ServerSocket来实现双工通讯。下面是实现Java双工通讯的步骤:
- 创建ServerSocket对象并指定端口号。
- 调用ServerSocket的accept()方法监听客户端的连接请求。
- 创建Socket对象并指定服务器的IP地址和端口号。
- 使用Socket对象的输入流和输出流进行数据的读取和写入。
- 在服务器端,使用Socket的输入流读取客户端发送的数据,并使用输出流向客户端发送响应。
- 在客户端,使用Socket的输入流读取服务器发送的响应,并使用输出流向服务器发送数据。
- 关闭Socket和ServerSocket对象,释放资源。
下面是具体的代码实现:
服务器端代码
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 创建ServerSocket对象并指定端口号
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
// 监听客户端的连接请求
Socket socket = serverSocket.accept();
System.out.println("客户端已连接,IP地址:" + socket.getInetAddress());
// 创建输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 读取客户端发送的数据
String clientMsg = reader.readLine();
System.out.println("客户端发送的消息:" + clientMsg);
// 向客户端发送响应
String response = "Hello, I'm server!";
writer.write(response + "\n");
writer.flush();
// 关闭资源
reader.close();
writer.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 创建Socket对象并指定服务器的IP地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
// 创建输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 向服务器发送数据
String msg = "Hello, I'm client!";
writer.write(msg + "\n");
writer.flush();
// 读取服务器发送的响应
String serverMsg = reader.readLine();
System.out.println("服务器发送的消息:" + serverMsg);
// 关闭资源
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上代码实现了简单的Java双工通讯,服务器端和客户端可以相互发送消息。在服务器端,首先创建ServerSocket对象并指定端口号,然后调用accept()方法监听客户端连接请求。在客户端,创建Socket对象并指定服务器的IP地址和端口号。之后,通过输入流和输出流进行数据的读取和写入。
流程图如下:
flowchart TD
A(创建ServerSocket对象并指定端口号) --> B(监听客户端的连接请求)
B --> C(创建Socket对象并指定服务器的IP地址和端口号)
C --> D(使用Socket对象的输入流和输出流进行数据的读取和写入)
D --> E(使用输入流读取客户端发送的数据,并使用输出流向客户端发送响应)
E --> F(使用输入流读取服务器发送的响应,并使用输出流向服务器发送数据)
F --> G(关闭Socket和ServerSocket对象,释放资源)
代码中使用的markdown语法如下:
`代码内容`
下面是饼状图,表示服务器和客户端的数据传输量:
pie
title 数据传输量
"服务器发送的数据" : 30
"客户端发送的数据" : 20
通过以上步骤和代码,你就可以实现Java双工通讯了。希望对你有所帮助!