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
}
要想玩得爽,还是用第一种比较靠谱。知根知底。
Golang 如何从socket读出所有数据的更多相关文章
- 转载: Erlang Socket解析二进制数据包
		转自:http://www.itkee.com/developer/detail-318.html 今天在家里闲来无事,实践了一下Erlang的Socket的功能.记录一下在过程中遇到的一些问题,以及 ... 
- C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全
		简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ... 
- hadoop单线程实现server多socket连接读取数据原理分析
		一.问题引出. Hadoop 的Server 采用了Java 的NIO,这样的话就仅需要为每一个socket 连接建立一个线程,读取socket 上的数据.在Server 中,只需要一个线程,就可以a ... 
- 2、 Spark Streaming方式从socket中获取数据进行简单单词统计
		Spark 1.5.2 Spark Streaming 学习笔记和编程练习 Overview 概述 Spark Streaming is an extension of the core Spark ... 
- C#通过Socket读取大量数据
		在C#中经常会用到Socket去接收和发送数据,而且也是非常方便的,有时候我们会向服务端去请求数据,如果返回的数据量很大,比如超过10M甚至是更多,那么该怎样去接收数据呢?下面以一个在项目中用到的实例 ... 
- 网络编程基础【day09】:socket接收大数据(五)
		本节内容 1.概述 2.socket接收大数据 3.中文字符的坑 一.概述 上篇博客写到了,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区 ... 
- golang中tcp socket粘包问题和处理
		转自:http://www.01happy.com/golang-tcp-socket-adhere/ 在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据 ... 
- 【python】-- Socket接收大数据
		Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ... 
- golang中的socket编程
		0.1.索引 https://waterflow.link/articles/1664591292871 1.tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当 ... 
随机推荐
- 解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题(转)
			http://blog.csdn.net/psy1100/article/details/51179342 今天要将自己的API接口和MODEL导出来一份java doc参考文档, 但是在导出的时候却 ... 
- unity3d shader 学习
			[浅墨Unity3D Shader编程] 着色器参考 [Unity Shaders] 
- system函数的应用一例
			system函数的应用一例 
- Window.sessionStorage
			The sessionStorage property allows you to access a session Storage object for the current origin. ... 
- innerWidth outerWidth
			在jQuery中: 一.width()方法用于获得元素宽度: 二.innerWidth()方法用于获得包括内边界(padding)的元素宽度; 三.outerWidth()方法用于获得包括内边界(pa ... 
- C#.NET常见问题(FAQ)-如何使用变量访问控件属性
			不管哪种类型的控件,可以用下面这种强制转换和Controls.Find的方法来读写控件的属性 //我在界面上做了三个picturebox控件 PictureBox p; //注意索引必须从1开始,并且 ... 
- CXF实战之拦截器Interceptor(四)
			拦截器(Interceptor)是CXF功能最基本的扩展点,能够在不正确核心模块进行改动的情况下.动态加入非常多功能.拦截器和JAX-WS Handler.Filter的功能相似,当服务被调用时.就会 ... 
- asp.net 常用于客户端注册的机器信息
			项目需要:根据客户端信息去获取用户登录信息 1.根据客户端信息,并查询数据库是否有匹配.如果没有则重新插入客户端信息: 2.根据客户端的设置提交用户登录信息,用户登录成功后,查询以前是否有过配置信息, ... 
- DIV+CSS IE6/IE7/IE8/FF兼容问题汇总
			1.IE8下兼容问题,这个最好处理,转化成ie7兼容就可以.在头部加如下一段代码,然后只要在IE7下兼容了,IE8下面也就兼容了 <meta http-equiv="x-ua-comp ... 
- Java通过ScriptEngine 执行js脚本案例
			public static void main(String[] args) throws ScriptException, FileNotFoundException, NoSuchMethodEx ... 
