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)
:循环读取用户输入的数据,并将其发送给服务器,同时接收服务器的响应信息。
通过上述代码,你可以实现一个简单的客户端 - 服务器通信程序。在实际应用中,你可以根据需求对代码进行扩展和优化。