最新公告
  • 欢迎您光临极客文库,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 简介

    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实现简单的回音壁聊天室功能

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    Leave a Reply

    Hi, 如果你对这款资源有疑问,可以跟我联系哦!

    联系发布者

    Leave a Reply

    Hi, 如果你对这款资源有疑问,可以跟我联系哦!

    联系发布者
    • 108会员总数(位)
    • 3695资源总数(个)
    • 3本周发布(个)
    • 0 今日发布(个)
    • 181稳定运行(天)

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

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级