首页 > 其他分享 >Socket初体验

Socket初体验

时间:2024-06-13 13:57:36浏览次数:9  
标签:printWriter Socket 初体验 socket println new 客户端

电脑windows连接Socket的服务端:telnet localhost 1024

 服务端

public class SocketServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Map<String,Socket> CLENT_MAP = new HashMap<>();//用于存储连接进来的客户端
        try{
            //服务端ServerSocket 对象并指定端口号为 1024
            serverSocket = new ServerSocket(1024);
            System.out.println("服务已启动,等待客户端连接");
            //连接多个客户端
            while (true){
                //客户端Socket对象
                Socket socket = serverSocket.accept();//连接
                //获取客户端连接的 IP 地址和端口号
                String ip = socket.getInetAddress().getHostAddress();
                System.out.println("有客户端连接ip:"+ ip +"端口:" + socket.getPort());

                String clientKey = ip + socket.getPort();//ip+端口号
                CLENT_MAP.put(clientKey,socket);//key:ip+端口号 value:客户端Socket对象

                new Thread(()->{
                    while (true){
                        try{
                            //获取客户端发送的消息
                            InputStream inputStream = socket.getInputStream();
                            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf8");
                            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                            String readData = bufferedReader.readLine();
                            System.out.println("收到客户端消息->" + readData);

                            //可以回复消息,谁发回谁
//                            OutputStream outputStream = socket.getOutputStream();
//                            PrintWriter printWriter = new PrintWriter(outputStream);
//                            printWriter.println("我是服务端,我已经收到了你发的消息" + readData);
//                            printWriter.flush();
                            CLENT_MAP.forEach((k,v)->{
                                    try{
                                        //获取发消息的对象
                                        OutputStream outputStream = v.getOutputStream();
                                        PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(outputStream,"utf8"));
                                        printWriter.println(socket.getPort()+ ":" + readData);
                                        printWriter.flush();
                                    }catch (Exception e){
                                        e.printStackTrace();
                                    }
                                });
                        }catch (Exception e){
                            e.printStackTrace();
                            break;
                        }
                    }
                }).start();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

客户端

public class SocketClient {
    public static void main(String[] args) {
        Socket socket = null;
        try{
            //本地主连1024端口
            socket = new Socket("127.0.0.1",1024);

            OutputStream outputStream = socket.getOutputStream();
            PrintWriter printWriter = new PrintWriter(outputStream);
            System.out.println("请输入内容");

            new Thread(()->{
                while (true){
                    try{
                        Scanner scanner = new Scanner(System.in);
                        String input = scanner.nextLine();
                        try{
                            printWriter.println(input);
                            printWriter.flush();
                        }catch (Exception e){
                            e.printStackTrace();
                            break;
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
            //获取客户端发送的消息
            InputStream inputStream = socket.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            //接收回复的消息
            new Thread(()->{
                while (true){
                    try{
                        String readData = bufferedReader.readLine();
                        System.out.println("收到服务端消息->" + readData);
                    }catch (Exception e){
                        e.printStackTrace();
                        break;
                    }

                }
            }).start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

标签:printWriter,Socket,初体验,socket,println,new,客户端
From: https://blog.csdn.net/weixin_63164764/article/details/139652442

相关文章

  • boost-Asio 基础学习2 --socket 服务端和客户端简单通讯
    已经写了两期文章了!这是第三期现在也到使用asio库实现一些基础的小功能了......
  • 前端微服务架构qiankun初体验
    一、背景‘熵增’问题一直是所有软件开发中都会遇到的问题,不管是前端还是后端都会遇到,老的系统在需求不断变更或者迭代,代码量会越来越大,最终都会形成一座‘屎山’,今天主要讨论前端对于这种情况的解决方案。目前前端的解决方案有比较古老的iframe,但是iframe是完全隔绝了......
  • springboot集成socketio
    1.引入依赖<dependency><groupId>com.corundumstudio.socketio</groupId><artifactId>netty-socketio</artifactId><version>2.0.3</version></dependency>2.基本配置server:port:8081socketio:host:localho......
  • Unix socket lock file is empty /var/run/mysqld/mysqld.sock.lock
    介绍当使用MySQL数据库时,有时候会遇到一个错误信息,提示“Unixsocketlockfileisempty:/var/run/mysqld/mysqld.sock.lock.”这个错误一般是由于MySQL服务器无法启动造成的。在本文中,我们将探讨这个错误的原因和解决方案。错误原因/var/run/mysqld/mysqld.sock.lock......
  • 基于.Net 框架实现WebSocket 简单通信——服务端
    新建项目创建一个.Net框架的控制台程序。添加包 项目→管理NuGet程序包打开包管理窗口,添加SuperWebSocket程序包。实现项目→添加类打开添加新项窗口,添加一个C#类。启动监听 WebSocketServersocket=newWebSocketServer();Console.WriteLine("IP:"+ip......
  • WebSocket
    WebSocket介绍WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。HTTP协议和WebSocket协议对比:HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请......
  • 1_websocket工具封装
    Websocket1构造函数newWebSocket(url[,protocols])参数url:要连接到的URLprotocols:单个协议字符串或协议字符串数组2实例属性binaryType:接收的二进制数据的类型blobarraybufferreadyState:websocket连接的当前状态readyState值mean解释......
  • Socket编程权威指南(四)彻底解密 Epoll 原理
    在上一篇文章中,我们优化了基于Socket的网络服务器,从最初的select/poll模型进化到了高效的epoll。很多读者对epoll的惊人性能表示极大的兴趣,对它的工作原理也充满了好奇。今天,就让我们一起揭开epoll神秘的面纱,深入剖析其内部运作机制,进一步提升你的Linux网络编程......
  • TouchSocke 中使用WebSocket的快捷事务命令行
    1、效果2、开发环境:    2.1、NetFramework4.5    21.2、NuGet中安装TouchSocket2.0.0、TouchSocket.Core2.0.0、TouchSocket.Http2.0.0如下图。3、代码如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Tex......
  • 开源模型应用落地-LangSmith试炼-入门初体验-Prompts(六)
    一、前言  在许多应用程序中,特别是在大型语言模型(LLM)应用程序中,收集用户反馈以了解应用程序在实际场景中的表现是非常重要的。  本章是LangSmith系列最后一篇文章,通过学习Prompts功能,用户可以上传、浏览、检索和管理提示(Prompt)。这个Prompts功能简化了提示(Prompt)的......