第一种:

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读出所有数据的更多相关文章

  1. 转载: Erlang Socket解析二进制数据包

    转自:http://www.itkee.com/developer/detail-318.html 今天在家里闲来无事,实践了一下Erlang的Socket的功能.记录一下在过程中遇到的一些问题,以及 ...

  2. C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  3. hadoop单线程实现server多socket连接读取数据原理分析

    一.问题引出. Hadoop 的Server 采用了Java 的NIO,这样的话就仅需要为每一个socket 连接建立一个线程,读取socket 上的数据.在Server 中,只需要一个线程,就可以a ...

  4. 2、 Spark Streaming方式从socket中获取数据进行简单单词统计

    Spark 1.5.2 Spark Streaming 学习笔记和编程练习 Overview 概述 Spark Streaming is an extension of the core Spark ...

  5. C#通过Socket读取大量数据

    在C#中经常会用到Socket去接收和发送数据,而且也是非常方便的,有时候我们会向服务端去请求数据,如果返回的数据量很大,比如超过10M甚至是更多,那么该怎样去接收数据呢?下面以一个在项目中用到的实例 ...

  6. 网络编程基础【day09】:socket接收大数据(五)

    本节内容 1.概述 2.socket接收大数据 3.中文字符的坑 一.概述 上篇博客写到了,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区 ...

  7. golang中tcp socket粘包问题和处理

    转自:http://www.01happy.com/golang-tcp-socket-adhere/ 在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据 ...

  8. 【python】-- Socket接收大数据

    Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...

  9. golang中的socket编程

    0.1.索引 https://waterflow.link/articles/1664591292871 1.tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当 ...

随机推荐

  1. python用post访问restful服务接口

    具体代码如下: import requests import json data={"]} url="http://XXXXX" data_json = json.dum ...

  2. ubuntu忘记root密码 的解决方法

    alt+f2,在弹出的运行窗口中输入:gnome-terminal,回车. 即进入终端 输入:sudo passwd root,回车后会提示你输入你当前用户的密码 之后 按提示输入两次root的密码( ...

  3. 转:无监督特征学习——Unsupervised feature learning and deep learning

    http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio clas ...

  4. 分词中的HMM

    http://blog.csdn.net/heavendai/article/details/7030102 1.       首先来说一下马尔科夫链.   一个事件序列发生的概率可以用下面的概率论里 ...

  5. Centos6.4下安装protobuf及简单使用

    1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载最新的protobuf,下载地址:https ...

  6. 使用FractionSlider生成的视差幻灯效果原型

    在线演示 本地下载 非常棒的jQuery插件,帮助你创建超酷的视差效果幻灯!

  7. 查看oracle的sql语句历史记录和锁表的情况

    查看oracle的sql语句历史记录和锁表的情况 (2012-01-04 20:59:59) 转载▼ 标签: 杂谈 分类: database 查询sql的历史记录 select * from v$sq ...

  8. Android Studio中关于9-patch格式图片的编译错误

    最近在编译Android Studio开发的项目中在使用了9宫图后出现了编译错误,尝试了多种方法未能解决,最后仔细查看出错的日志发现,居然是图片的原因,图片中包含有alpah通道所以在执行app:me ...

  9. Jquery 中的CheckBox、 RadioButton、 DropDownList的取值赋值

    1.获取选中值,三种方法都可以: $('input:radio:checked').val(): $("input[type='radio']:checked").val(); $ ...

  10. Ubuntu MYSQL环境搭建

    前期准备: 检查系统资源 内存大小 # grep MemTotal/proc/meminfo 检查系统版本 统一为: Ubuntu 12.04.1 LTS(GNU/Linux 3.2.0-29-gen ...