1. 首页
  2. 文章

Golang 如何从socket读出所有数据

cobbliu ·

第一种:

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
}

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

本文来自:博客园

感谢作者:cobbliu

查看原文:Golang 如何从socket读出所有数据

wuxian
走自己的路,让别人有路可走!
mark
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中