面试题答案
一键面试服务器端基本工作流程
- 创建ServerSocket对象:
使用
ServerSocket
类创建一个对象,用于监听特定端口。例如:
ServerSocket serverSocket = new ServerSocket(12345);
这里的12345
是要监听的端口号。
2. 绑定端口:
在创建ServerSocket
对象时,通过构造函数传入要绑定的端口号,如上述代码中ServerSocket(12345)
,即将服务器绑定到12345
端口。
3. 监听连接:
调用serverSocket.accept()
方法,该方法会阻塞,直到有客户端连接到服务器所监听的端口。一旦有客户端连接,它会返回一个新的Socket
对象用于与该客户端进行通信。例如:
Socket clientSocket = serverSocket.accept();
- 数据传输:
通过返回的
Socket
对象获取输入输出流来进行数据传输。- 获取输出流发送数据:
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream, true);
out.println("Hello, Client!");
- 获取输入流接收数据:
InputStream inputStream = clientSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String clientMessage = in.readLine();
- 关闭连接:
通信结束后,关闭相关流和
Socket
对象。
in.close();
out.close();
clientSocket.close();
serverSocket.close();
客户端基本工作流程
- 创建Socket对象:
使用
Socket
类创建一个对象,指定服务器的IP地址和端口号,尝试与服务器建立连接。例如:
Socket socket = new Socket("127.0.0.1", 12345);
这里"127.0.0.1"
是服务器的IP地址,12345
是服务器监听的端口号。
2. 建立连接:
在创建Socket
对象时,会尝试与指定IP地址和端口号的服务器建立连接。如果连接成功,就可以进行后续通信。
3. 数据传输:
与服务器端类似,通过Socket
对象获取输入输出流来进行数据传输。
- 获取输出流发送数据:
OutputStream outputStream = socket.getOutputStream();
PrintWriter out = new PrintWriter(outputStream, true);
out.println("Hello, Server!");
- 获取输入流接收数据:
InputStream inputStream = socket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String serverMessage = in.readLine();
- 关闭连接:
通信结束后,关闭相关流和
Socket
对象。
in.close();
out.close();
socket.close();