Java模拟实现socket通信
客户端代码:
package org.example.socket;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;/*** 客户端*/
public class Client {public static void main(String[] args) {String host = "localhost";int port = 12345;System.out.println("客户端准备就绪,开始连接服务器");try(Socket socket = new Socket(host, port)) {System.out.println("客户端成功连接服务器: host-" + socket.getInetAddress() + ", port-" + socket.getPort());BufferedReader inputBuffer = new BufferedReader(new InputStreamReader(System.in));BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);String msg;while(true) {System.out.println("请输入消息:");msg = inputBuffer.readLine();if(!msg.equalsIgnoreCase("bye")) {System.out.println("客户端开始传输数据:......");out.println(msg);String msgFromServer = in.readLine();System.out.println("客户端收到服务器消息 : " + msgFromServer);}else {System.out.println("客户端退出");break;}}}catch (Exception e) {e.printStackTrace();}}
}
服务端代码:
package org.example.socket;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** 服务器端*/
public class Server {public static void main(String[] args) throws IOException {int port = 12345;// 端口号try(ServerSocket serverSocket = new ServerSocket(port)) {System.out.println("服务器启动,等待客户端连接:........");Socket clientSocket = serverSocket.accept();//等待客户端连接 如果客户端迟迟不发送数据,就会一直阻塞等待// 成功接收到连接System.out.println("成功接收到客户端连接,地址为 : " + clientSocket.getInetAddress());// 获取输入流,设置输出流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);String msg;while((msg = in.readLine()) != null) {System.out.println("服务端接收到数据:" + msg);// 传递数据给客户端out.println("服务器已经接收到你传输的数据, 数据内容为: " + msg);// 检测到 bye 就断开链接if(msg.equalsIgnoreCase("bye")) {System.out.println("客户端断开连接");break;}}clientSocket.close();}catch (Exception e) {e.printStackTrace();}}
}