这是一个简单的 Java 客户端-服务器通信示例,展示如何使用 Socket 进行基本的通信。
客户端代码的主要功能是与服务器建立连接并发送请求。首先,需要创建一个 Socket 对象,并指定服务器的 IP 地址和端口号。通过获取 Socket 的输出流,将要发送的请求以字节流的形式写入输出流中。然后,通过获取 Socket 的输入流,读取服务器返回的响应数据,并将字节流转换为字符串进行打印。
代码示例:
public class Client {
public static void main(String[] args) {
try {
// 创建套接字对象访问服务器端口
Socket socket = new Socket("目标IP地址", 9999);
// 发送图片
OutputStream outputStream = socket.getOutputStream();
FileInputStream fileInputStream = new FileInputStream("图片路径");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
// 发送信息
String message = "这是客户端发送的信息";
outputStream.write(message.getBytes("utf-8"));
// 接收响应
InputStream inputStream = socket.getInputStream();
byte[] responseBuffer = new byte[1024];
int responseLength = inputStream.read(responseBuffer);
String response = new String(responseBuffer, 0, responseLength, "utf-8");
System.out.println("收到响应:" + response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
服务器端的主要功能是监听指定的端口,等待客户端连接,并处理客户端的请求。首先,需要创建一个 ServerSocket 对象,指定要监听的端口号。通过调用 accept() 方法等待客户端连接,一旦有客户端连接,就创建一个 Socket 对象来处理该客户端的请求。然后,通过获取 Socket 的输入流,读取客户端发送的请求数据,并将字节流转换为字符串进行打印。接着,通过获取 Socket 的输出流,将要发送的响应以字节流的形式写入到输出流中。
代码示例:
public class Main {
public static void main(String[] args) {
try {
// 创建服务器
// 创建ServerSocket
System.out.println("启动服务器");
ServerSocket serverSocket = new ServerSocket(9999);
// 等待客户端连接
Socket socket = serverSocket.accept();
// 接收图片
InputStream inputStream = socket.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("保存图片的路径");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
}
fileOutputStream.close();
// 接收信息
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] messageBuffer = new byte[1024];
int messageLength;
while ((messageLength = inputStream.read(messageBuffer)) != -1) {
byteArrayOutputStream.write(messageBuffer, 0, messageLength);
}
String message = new String(byteArrayOutputStream.toByteArray(), "utf-8");
System.out.println("收到信息:" + message);
// 响应客户端
OutputStream outputStream = socket.getOutputStream();
String response = "已经收到图片和信息,这是返回响应";
outputStream.write(response.getBytes("utf-8"));
// 关闭连接
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
学习这个简单的 Java 客户端-服务器通信示例,可以帮助我们掌握网络通信基础知识、Socket 编程技能、数据传输和处理能力等重要的编程技能。通过此示例,我们可以深入了解客户端-服务器架构的工作原理,以及如何通过代码实现基本的网络通信功能。总之,学习这个示例不仅有助于提升我们的技术水平,也对我们日后的职业发展具有重要的意义。