Java中的Socket编程概述

在Java里,Socket编程是实现网络通信的一种方式。它借助java.net包中的SocketServerSocket类,让不同设备(或者同一设备上的不同进程)之间能够进行数据交换。Socket就像是网络通信的端点,它能建立连接、发送和接收数据。ServerSocket则用于服务器端,负责监听特定端口,等待客户端的连接请求。

使用Socket实现客户端和服务器端通信的步骤

服务器端步骤

  1. 创建ServerSocket对象:指定服务器要监听的端口号。
  2. 等待客户端连接:调用ServerSocketaccept()方法,该方法会阻塞程序,直到有客户端连接进来。
  3. 获取输入输出流:连接建立后,从Socket对象中获取输入流和输出流,用于接收和发送数据。
  4. 进行数据交互:通过输入输出流进行数据的读写操作。
  5. 关闭连接:通信结束后,关闭SocketServerSocket

客户端步骤

  1. 创建Socket对象:指定服务器的IP地址和端口号,尝试与服务器建立连接。
  2. 获取输入输出流:从Socket对象中获取输入流和输出流,用于接收和发送数据。
  3. 进行数据交互:通过输入输出流进行数据的读写操作。
  4. 关闭连接:通信结束后,关闭Socket

示例代码

代码解释

  • 服务器端

    • ServerSocket serverSocket = new ServerSocket(8888):创建一个ServerSocket对象,监听8888端口。
    • Socket socket = serverSocket.accept():等待客户端连接,连接成功后返回一个Socket对象。
    • BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())):获取输入流,用于接收客户端发送的数据。
    • PrintWriter out = new PrintWriter(socket.getOutputStream(), true):获取输出流,用于向客户端发送数据。
    • while ((inputLine = in.readLine()) != null):循环读取客户端发送的数据,并将响应信息发送给客户端。
  • 客户端

    • Socket socket = new Socket("localhost", 8888):创建一个Socket对象,尝试连接到本地的8888端口。
    • PrintWriter out = new PrintWriter(socket.getOutputStream(), true):获取输出流,用于向服务器发送数据。
    • BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())):获取输入流,用于接收服务器返回的数据。
    • while ((userInput = stdIn.readLine()) != null):循环读取用户输入的数据,并将其发送给服务器,同时接收服务器的响应信息。

通过上述代码,你可以实现一个简单的客户端 - 服务器通信程序。在实际应用中,你可以根据需求对代码进行扩展和优化。