Loading... ## Socket套接字简介 Socket是网络上运行两个程序之间的双向通信链路的断点。Socket绑定到一个端口号,使得TCP层可以标识数据最终要被发送到哪个应用程序。 java.net包中提供了一个类`Socket`,用于Java程序和网络其他程序之间的双向连接,Socket类隐藏了任何特定系统的细节,通过操作java.net.Socket类,Java程序可以通过独立于平台的方式与网络进行通信。 此外java.net包中包含了`ServerSocket`,实现了用于服务器上的Socket,它可以监听和接收客户端的连接。 ## 实例 下面实现一个反射对话的客户端与服务端程序。 功能为:客户端发送一句话给服务端,服务端将这句话原封不动返回给客户端。 ### 服务端 ```java public class EchoServer { public static void main(String[] args) throws IOException { // 端口号 int portNumber = 12; // 新建一个服务端Socket ServerSocket serverSocket = new ServerSocket(portNumber); // 当客户端连接上后,通过服务端Socket的监听获取到客户端的Socket Socket clientSocket = serverSocket.accept(); // 发送的数据 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); // 接收到客户端的数据 BufferedReader in = new BufferedReader(new InputStreamReader((clientSocket.getInputStream()))); String inputLine; while ((inputLine = in.readLine()) != null){ out.println(inputLine); } } } ``` ### 客户端 ```java public class EchoClient { public static void main(String[] args) throws IOException { String hostName = "localhost"; int portNumber = 12; // 新建客户端的Socket Socket echoSocket = new Socket(hostName, portNumber); // 发送给服务端的数据 PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true); // 接收到的数据 BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); // 原始输入数据 BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("echo服务器返回的话:" + in.readLine()); } } } ``` ### 输入输出测试 先启动服务端,再启动客户端,在客户端窗口输入任何话 ``` 123456 echo服务器返回的话:123456 你是猪 echo服务器返回的话:你是猪 ``` 最后修改:2020 年 12 月 15 日 11 : 20 AM © 允许规范转载