一、原理
Java中进行网络编程,需要编写两个类,一个是服务器类,一个是客户端类。
(1)服务器首先要指定监听哪个端口,然后把端口参数传入到ServerSocket的构造方法,然后通过serverSocket的accept方法等待连接。连接建立后,从Socket中获取输入流和输出流,循环读取客户端数据,并处理并回复。最后关闭资源。
(2)客户端创建一个Socket对象,指定服务器的IP和端口。连接建立后,从Socket中获取输入流和输出流,然后发送数据到服务器,并读取服务器的响应。最后关闭资源。
二、代码示例
服务器类
public class SimpleTCPServer {public static void main(String[] args) throws IOException {int port = 1234; // 服务器将在1234端口监听ServerSocket serverSocket = new ServerSocket(port);System.out.println("Server is listening on port " + port);// 服务器将等待连接Socket socket = serverSocket.accept();System.out.println("New client connected");// 获取输入流,读取客户端发送的数据BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 获取输出流,向客户端发送数据PrintWriter output = new PrintWriter(socket.getOutputStream(), true);String line;while ((line = input.readLine()) != null) {System.out.println("Received: " + line);// 回显客户端发送的消息output.println("Echo from server: " + line);}// 关闭资源input.close();output.close();socket.close();serverSocket.close();}
}
客户端类
public class SimpleTCPClient {public static void main(String[] args) throws IOException {String host = "localhost"; // 服务器地址int port = 1234; // 服务器端口Socket socket = new Socket(host, port);System.out.println("Connected to server");// 获取输出流,向服务器发送数据PrintWriter output = new PrintWriter(socket.getOutputStream(), true);// 获取输入流,读取服务器发送的数据BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 发送消息到服务器output.println("Hello, Server!");// 读取服务器回显的消息String line = input.readLine();System.out.println("Server: " + line);// 关闭资源output.close();input.close();socket.close();}
}