前言
Socket和ServerSocket是Java网络编程中最基础的两个类,它们被广泛应用于开发客户端和服务端之间的网络通信。在这个攻略中,我们将详细讲解Socket和ServerSocket类的基础知识,包括它们的概念、使用方法和示例应用。
Socket类
概念
Socket类是Java中的一个基础类,用于客户端和服务端之间的网络通信。客户端Socket对象用于连接服务器,发送请求和接收响应。服务端Socket对象则用于监听客户端连接请求并建立连接。Socket类实现了底层的TCP/IP协议,提供了简单易用的API接口。
构造函数
Socket类有多个构造函数,常用的有以下两种:
public Socket(String host, int port) throws UnknownHostException, IOException;
public Socket(InetAddress address, int port) throws IOException;
其中,第一个构造函数接受两个参数,分别是服务器的主机名和端口号;第二个构造函数接受两个参数,分别是服务器的IP地址和端口号。
注意:需要抛出的异常包括UnknownHostException(主机名错误)和IOException(Input/Output错误)。
方法
Socket类提供了多个方法,常用的有以下几个:
- connect():连接服务器。
- getInputStream():获取输入流,用于接收服务器发送的数据。
- getOutputStream():获取输出流,用于向服务器发送数据。
- close():关闭Socket连接。
示例应用
客户端
以下代码展示了一个基本的客户端Socket应用。该示例连接到一个运行在本地8080端口上的服务器,向服务器发送一个字符串,并接收服务器返回的响应。
String host = "localhost";
int port = 8080;
try (Socket socket = new Socket(host, port)) {
OutputStream output = socket.getOutputStream();
InputStream input = socket.getInputStream();
String message = "Hello, Server!";
output.write(message.getBytes());
byte[] buffer = new byte[1024];
int len = input.read(buffer);
String response = new String(buffer, 0, len);
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}
服务端
以下代码展示了一个基本的服务端Socket应用。该示例监听在本地8080端口上,等待客户端连接,并接收客户端发送的字符串,并向客户端返回一个响应字符串。
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected");
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
byte[] buffer = new byte[1024];
int len = input.read(buffer);
String message = new String(buffer, 0, len);
System.out.println("Received message from client: " + message);
String response = "Hello, Client!";
output.write(response.getBytes());
System.out.println("Sent response to client: " + response);
clientSocket.close();
System.out.println("Client disconnected");
}
} catch (IOException e) {
e.printStackTrace();
}
ServerSocket类
概念
ServerSocket类是Java中的一个基础类,用于服务端接受客户端的连接请求。ServerSocket对象一般在服务端应用启动时被创建,并绑定特定的端口号。当有客户端连接到该端口时,ServerSocket对象可以使用accept()方法接受该连接请求并创建一个对应的Socket对象。
构造函数
ServerSocket类有多个构造函数,常用的有以下两种:
public ServerSocket(int port) throws IOException;
public ServerSocket(int port, int backlog) throws IOException;
其中,第一个构造函数接受一个参数,表示绑定的端口号;第二个构造函数接受两个参数,分别是绑定的端口号和连接请求队列的最大长度。
注意:需要抛出的异常包括IOException(Input/Output错误)。
方法
ServerSocket类提供了多个方法,常用的有以下几个:
- accept():接受客户端连接请求,创建对应的Socket对象。
- close():关闭ServerSocket连接。
示例应用
以下代码展示了一个基本的服务端Socket应用。该示例监听在本地8080端口上,等待客户端连接,并接收客户端发送的字符串,并向客户端返回一个响应字符串。与上面的客户端示例结合起来使用。
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected");
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
byte[] buffer = new byte[1024];
int len = input.read(buffer);
String message = new String(buffer, 0, len);
System.out.println("Received message from client: " + message);
String response = "Hello, Client!";
output.write(response.getBytes());
System.out.println("Sent response to client: " + response);
clientSocket.close();
System.out.println("Client disconnected");
}
} catch (IOException e) {
e.printStackTrace();
}
结语
本文对Socket和ServerSocket类的基础知识和应用做了简单的介绍。Java网络编程有着更为广泛和实际的应用场景,有兴趣的读者可以深入学习。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Socket类以及ServerSocket类的实例讲解 - Python技术站