天天看点

Java Socket服务端客户端通信实例

1. Socket是啥

实际上是Java为TCP通信封装的模型对象。

TCP通信有服务端和客户端之分,Java语言为此提供了ServerSocket和Socket类。

2. 运行机制

服务端运行在一个机器的某个端口上,等待客户端来访问。

客户端向指定IP的机器的指定端口发起访问。

当服务端接收到客户端的访问请求时,会建立一个Socket来代表该客户端,通过该Socket进行输入输出操作。

客户端与服务端建立连接后,也会有一个Socket,用于输入输出操作。

3. 代码示例

首先建立一个服务端,在10000端口等待客户端连接。

/**
 * Hello服务端
 */
public class HelloServerSocket {
    public static void main(String[] args) throws IOException {
        // 服务端Socket
        ServerSocket serverSocket = new ServerSocket(10000);
        // 一直运行,等待客户端请求
        while (true) {
            // 每当收到客户端请求,则生成一个对应的客户端Socket
            Socket socket = serverSocket.accept();
            // 对客户端输出Hello
            PrintStream stream = new PrintStream(socket.getOutputStream());
            stream.print("Hello");
            // 关闭输出流和客户端
            stream.close();
            socket.close();
        }
    }
}

然后通过客户端发起访问请求:

/**
 * Hello客户端
 */
public class HelloClientSocket {
    public static void main(String[] args) throws UnknownHostException, IOException {
        // 指定服务端IP和端口
        Socket socket = new Socket("127.0.0.1", 10000);
        // 获取输入流,此处包装了下,通过BufferedReader读取服务端输入内容
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println("来自服务端的问候:" + line);
        }
    }
}
4. 测试
先运行服务端,然后运行客户端,每次运行客户端控制台会打印:

来自服务端的问候:Hello
1
5. 小结
这是一个最简单的Socket通信程序了,可以发现Java的封装还是比较到位的。