利用Socket实现简单的回音壁聊天室功能

简介

Socket是Java网络编程中重要的一部分,本次我们通过使用Socket来实现一个简单的网络编程,包含客户端和服务端,客户端发送消息给服务端后,服务端返回一样的消息给客户端。类似于回音壁的效果。

效果演示

首先,分别启动客户端和服务端,此时服务端会打印端口,客户端启动后,服务端会打印客户端已连接

然后用客户端发送消息即可,发送消息后就会收到服务端的回复。。

然后切回服务端,此时也能看到打印的消息

就这么一个简单的功能,可以一起练练手。。。。

代码实现

首先实现服务端的代码:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author geekerstar
 * @description 服务端
 */
public class Server {
    public static void main(String[] args) {
        final String QUIT = "quit";
        final int DEFAULT_PORT = 8888;
        ServerSocket serverSocket = null;

        try {
            // 绑定监听端口
            serverSocket = new ServerSocket(DEFAULT_PORT);
            System.out.println("启动服务器,监听端口" + DEFAULT_PORT);

            while (true) {
                // 等待客户端连接
                Socket socket = serverSocket.accept();
                System.out.println("客户端[" + socket.getPort() + "]已连接");
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(socket.getInputStream())
                );
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream())
                );

                String msg = null;
                while ((msg = reader.readLine()) != null) {
                    // 读取客户端发送的消息
                    System.out.println("客户端[" + socket.getPort() + "]:" + msg);
                    // 回复客户发送的消息
                    writer.write("服务器:" + msg + "\n");
                    writer.flush();

                    // 查看客户端是否退出
                    if (QUIT.equals(msg)) {
                        System.out.println("客户端[" + socket.getPort() + "]已断开连接");
                        break;

                    }
                }

            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                    System.out.println("关闭serverSocket");

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

接下来实现客户端代码

 

import java.io.*;
import java.net.Socket;

/**
 * @author geekerstar
 * @description 客户端
 */
public class Client {
    public static void main(String[] args) {
        final String QUIT = "quit";
        final String DEFAULT_SERVER_HOST = "127.0.0.1";
        final int DEFAULT_SERVER_PORT = 8888;
        Socket socket = null;
        BufferedWriter writer = null;

        try {
            // 创建socket
            socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT);

            // 创建IO流
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );
            writer = new BufferedWriter(
                    new OutputStreamWriter(socket.getOutputStream())
            );

            // 等待用户输入信息
            BufferedReader consoleReader = new BufferedReader(new BufferedReader(new InputStreamReader(System.in)));

            while (true) {
                String input = consoleReader.readLine();

                // 发送消息给服务器
                writer.write(input + "\n");
                writer.flush();

                // 读取服务器返回的消息
                String msg = reader.readLine();
                System.out.println(msg);

                // 查看用户是否退出
                if (QUIT.equals(input)) {
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                    System.out.println("关闭socket");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

接下来,首先启动服务端,运行Main方法,然后启动客户端即可。

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 利用Socket实现简单的回音壁聊天室功能

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多