Java Socket 同步通信实现

1. 概述

在本文中,我们将讨论如何使用Java Socket实现同步通信。首先,我们将介绍整个通信流程,并使用表格展示每个步骤。然后,我们将逐步讲解每个步骤需要做什么,并提供相应的代码示例。

2. 通信流程

在Java Socket中实现同步通信的整个流程如下:

步骤 描述
步骤1 服务器创建Socket并监听指定的端口
步骤2 客户端创建Socket并连接到服务器的IP地址和端口
步骤3 客户端发送请求到服务器
步骤4 服务器接收并处理客户端的请求
步骤5 服务器发送响应给客户端
步骤6 客户端接收并处理服务器的响应

3. 代码实现

步骤1:服务器创建Socket并监听指定的端口

服务器需要创建一个ServerSocket对象,并使用其bind()方法将其绑定到指定的IP地址和端口。

import java.io.IOException;
import java.net.ServerSocket;

public class Server {
    public static void main(String[] args) {
        int port = 8080;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server listening on port " + port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤2:客户端创建Socket并连接到服务器的IP地址和端口

客户端需要创建一个Socket对象,并使用其connect()方法连接到服务器的IP地址和端口。

import java.io.IOException;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        String serverIP = "127.0.0.1";
        int port = 8080;
        try {
            Socket socket = new Socket(serverIP, port);
            System.out.println("Connected to server " + serverIP + ":" + port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤3:客户端发送请求到服务器

客户端使用Socket的getOutputStream()方法获取输出流,然后使用输出流的write()方法发送请求数据给服务器。

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        String serverIP = "127.0.0.1";
        int port = 8080;
        try {
            Socket socket = new Socket(serverIP, port);
            OutputStream outputStream = socket.getOutputStream();
            String request = "Hello server!";
            outputStream.write(request.getBytes());
            System.out.println("Request sent to server: " + request);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤4:服务器接收并处理客户端的请求

服务器使用ServerSocket的accept()方法监听客户端的连接,并使用Socket的getInputStream()方法获取输入流,然后使用输入流的read()方法接收客户端的请求数据。

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        int port = 8080;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server listening on port " + port);
            
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String request = new String(buffer, 0, bytesRead);
            System.out.println("Request received from client: " + request);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤5:服务器发送响应给客户端

服务器使用Socket的getOutputStream()方法获取输出流,然后使用输出流的write()方法发送响应数据给客户端。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        int port = 8080;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server listening on port " + port);
            
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream