美文网首页
socket通信,tcp示例

socket通信,tcp示例

作者: 屎倒淋头还嚼便 | 来源:发表于2020-07-01 14:14 被阅读0次
    /**
    * 基于TCP协议的Socket通信,实现用户登录 服务端
    */
    public class TcpServer{    
        public static void main(String[] args) {
            try {
                // 1.创建一个服务器端的 Socket,即 ServerSocket,指定绑定的端,并监听           
                ServerSocket server = new ServerSocket(8888);
                // 2.调用 accept 方法开始监听,等待客户端连接            
                System.out.println("****服务器开始启动,等待客户端上线****");
                Socket socket = server.accept();
                // 3.获取一个输入流,用来读取客户端所发送的登录信息            
                InputStream is = socket.getInputStream();// 字节输入流            
                InputStreamReader isr = new InputStreamReader(is);// 将字节流转为            
                BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲            
                String info = null;
                while ((info = br.readLine()) != null) {
                    System.out.println("我是服务器,客户端说" + info);
                }
                socket.shutdownInput();// 关闭输入流            // 4.获取输出流           
                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os);// 包装打印流            
                pw.write("好的,我收到消息了,你可以出去玩了");
                pw.flush();
                socket.shutdownOutput();
                // 5.关闭资源            
                pw.close();
                br.close();
                isr.close();
                is.close();
                server.close();
            } catch (IOException e) {
    
            }finally {
                
            }
            
        }
    
    }
    
    /*
    
    * 客户端
    
    * */
    public class TcpClient{    
        public static void main(String[] args) {
            try {
                // 1.创建 socket 指定服务器地址和端            
                Socket client = new Socket("localhost", 8888);
                // 2.客户端向服务器发送登录信息            
                OutputStream os = client.getOutputStream();// 字节输出流           
                PrintWriter pw = new PrintWriter(os);
                pw.write("用户名: admin;密码:123");
                pw.flush();
                client.shutdownOutput();// 关闭输出流            // 3. 获取输入流           
                InputStream is = client.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String info = null;
                while ((info = br.readLine()) != null) {
                    System.out.println("服务器发来消息说:" + info);
                }
                // 3.关闭其他资源            
                pw.close();
                os.close();
                client.close();
            } catch (UnknownHostException e) {
                e.printStackTrace();
    
            } catch (IOException e) {
                e.printStackTrace();
    
            }
    
        }
    
    }
    

    spring项目启动的同时,开启一个socket服务端

    /**
    * 基于TCP协议的Socket通信,实现用户登录 服务端
    */
    @Component
    public class TcpServer{
        
        static {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        ServerSocket server = new ServerSocket(8765);
                        System.out.println("=========tcp启动了=========");
                        while(true) { // 死循环持续监听
                            // 当前线程进入阻塞(等待处理连接请求),该线程和后面处理往来数据的线程是同一个线程。
                            // 如果该线程正在处理数据,而此时又来了新的socketClient连接请求,并且仍由该线程处理,
                            // 那么此时,请求会进入等待,直到该线程处理完前面的数据。
                            Socket socket = server.accept();
                            InputStream is = socket.getInputStream();// 字节输入流            
                            InputStreamReader isr = new InputStreamReader(is);// 将字节流转为            
                            BufferedReader br = new BufferedReader(isr);// 为输入流添加缓冲    
                            StringBuilder sb = new StringBuilder();
                            String info = null;
                            while ((info = br.readLine()) != null) {
                                System.out.println("我是服务器,客户端说" + info);
                                sb.append(info);
                            }
                            socket.shutdownInput();// 关闭输入流 
                            OutputStream os = socket.getOutputStream(); // 4.获取输出流   
                            PrintWriter pw = new PrintWriter(os); // 包装打印流       
                            // 
                            if("chazhuang.txt".equals(sb.toString())) {
                                // 获取插桩文件
                                String gen = System.getProperty("user.dir");
                                BufferedReader reader = new BufferedReader(new FileReader(new File(gen+"/chazhuang.txt")));
                                String tempStr = null;
                                while ((tempStr = reader.readLine()) != null) {
                                    pw.write(tempStr+"\n");
                                    pw.flush();
                                }
                                reader.close();
                            }
                            socket.shutdownOutput();
                            // 5.关闭资源            
                            pw.close();
                            br.close();
                            isr.close();
                            is.close();
                            //server.close();
                    }
                } catch (IOException e) {
    
                }finally {
                    
                }
                }
            }).start();
                
        }
    

    相关文章

      网友评论

          本文标题:socket通信,tcp示例

          本文链接:https://www.haomeiwen.com/subject/aywcqktx.html