Socket套接字简介

Socket是网络上运行两个程序之间的双向通信链路的断点。Socket绑定到一个端口号,使得TCP层可以标识数据最终要被发送到哪个应用程序。
java.net包中提供了一个类Socket,用于Java程序和网络其他程序之间的双向连接,Socket类隐藏了任何特定系统的细节,通过操作java.net.Socket类,Java程序可以通过独立于平台的方式与网络进行通信。
此外java.net包中包含了ServerSocket,实现了用于服务器上的Socket,它可以监听和接收客户端的连接。

实例

下面实现一个反射对话的客户端与服务端程序。
功能为:客户端发送一句话给服务端,服务端将这句话原封不动返回给客户端。

服务端

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);
        }
    }
}

客户端

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 日
如果觉得我的文章对你有用,请随意赞赏