zoukankan      html  css  js  c++  java
  • Golang 如何从socket读出所有数据

    第一种:

    func read(conn *net.Conn) error {
            defer conn.Close()
    
            buf := make([]byte, 0, 4096)
            len := 0
    
            for {
                    n, err := conn.Read(buf[len:])
                    if n > 0 {
                           len += n
                    }
                    if err != nil {
                            if err != io.EOF {
                                    //Error Handler                                                                                            
                            }
    
                            break
                    }
            }
    
            // buf[:len] is the content                                                                                                        
    }
    

     第二种,更给力的一种方法:

    func read2(conn *net.Conn) error {
            defer conn.Close()
    
            var buf bytes.Buffer
    
            _, err := io.Copy(&buf, conn)
    	if err != nil {
                    // Error handler                                                                                                           
                    return err
            }
    
            return nil
    }
    

    从io.Copy的实现来看,它实际上跟第一种的实现非常像。它先从conn中读出最多32KB的数据,然后调用buf的Write方法将这些数据写入到buf中。 

    第三种:

    func read3(conn *net.Conn) error {
    	defer conn.Close()
    
            buf, err = ioutil.ReadAll(conn)
            if err != nil {
                    // Error Handler                                                                                                           
                    return err
            }
    
            // use buf...                                                                                                                      
    
            return nil
    }
    

    要想玩得爽,还是用第一种比较靠谱。知根知底。

  • 相关阅读:
    分布式事物的解决方法
    bootstrap的其他
    bootstrap表单控件
    多线程编程
    内存管理技术
    PrintWriter用法简析
    JSP内置对象
    Servlet学习应该注意的几点
    GPU渲染管线概述
    再说AutoComplete
  • 原文地址:https://www.cnblogs.com/cobbliu/p/4410118.html
Copyright © 2011-2022 走看看