Java中的Socket编程概述
在Java里,Socket编程是实现网络通信的一种方式。它借助java.net包中的Socket和ServerSocket类,让不同设备(或者同一设备上的不同进程)之间能够进行数据交换。Socket就像是网络通信的端点,它能建立连接、发送和接收数据。ServerSocket则用于服务器端,负责监听特定端口,等待客户端的连接请求。
使用Socket实现客户端和服务器端通信的步骤
服务器端步骤
- 创建
ServerSocket对象:指定服务器要监听的端口号。 - 等待客户端连接:调用
ServerSocket的accept()方法,该方法会阻塞程序,直到有客户端连接进来。 - 获取输入输出流:连接建立后,从
Socket对象中获取输入流和输出流,用于接收和发送数据。 - 进行数据交互:通过输入输出流进行数据的读写操作。
- 关闭连接:通信结束后,关闭
Socket和ServerSocket。
客户端步骤
- 创建
Socket对象:指定服务器的IP地址和端口号,尝试与服务器建立连接。 - 获取输入输出流:从
Socket对象中获取输入流和输出流,用于接收和发送数据。 - 进行数据交互:通过输入输出流进行数据的读写操作。
- 关闭连接:通信结束后,关闭
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):循环读取用户输入的数据,并将其发送给服务器,同时接收服务器的响应信息。
通过上述代码,你可以实现一个简单的客户端 - 服务器通信程序。在实际应用中,你可以根据需求对代码进行扩展和优化。