这是一个简单的 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 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"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
通过学习这个简单的 Java 客户端-服务器通信示例,可以获得网络通信基础知识、Socket 编程技能、数据传输和处理能力,以及对客户端-服务器架构的理解。这些基础知识和技能对于开发网络应用程序和理解网络通信原理都非常重要。