Golang 如何从网络连接读出所有数据

第一种:

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
}

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

时间: 2024-07-30 02:14:12

Golang 如何从网络连接读出所有数据的相关文章

查看网络连接的具体数据

输入命令:netstat -an |awk '/^tcp/ {++sta[$NF]} END {for (key in sta) print key, "\t",sta[key]}'结果:LISTEN 4ESTABLISHED 1 Linux下查看TCP各状态链接数的方法: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'仅查看连接状态的数据 一个完整的三次握手也就是 请求---应答---再次确认

MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)

时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是网络游戏中的核心部分,那么这两个东西又怎么和场景关联起来的? 一张截图 掉落(管理器) 1.初始化(init) 根据地图的长宽初始化掉落点数据. 2.是否可掉落(is can drop) 传入坐标返回该点是否可以掉落. 3.设置掉落点(set drop position) 传入一个坐标,并将该点设置

【Android】Android 登录界面设计和网络连接及验证登录

AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 布局文件:activity_main.xml <RelativeLayout xm

网络连接的三次握手及四次握手

网络连接的三次握手及四次握手   一个数据从一台主机传输到另一台主机,看似平淡无奇,但是稍微了解就知道其底层其实是非常复杂的,下面我们说一下OSI(Open System Interconnection)开放系统互连,一个数据要经过7个过程的层层打包,然后到对方电脑后再层层解包来完成.     第一层:物理层(physical)也是最底层了,把打包好的数据通过二进制进行传输.为启动.维护以及关闭物理链定义了电气规范.机械规范.过程规范和功能规范.     第二层:数据链路层(data link)

VMware网络连接模式说明及故障排查

一.VMware网络连接模式-桥接.NAT以及仅主机模式的详细介绍和区别 VMware 桥接模式 VMware桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络(例如图中所示的局域网和Internet,下同).简而言之,这就好像在上图所示的局域网中添加了一台新的.独立的计算机一样.因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问.桥接模式网络连接支持有线和无线主机网络适配器.如果

Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有配套方法 6.缓存.重试 7.cookie支持session  id会话支持 8.弱网性能和稳定性 9.超时时间,几种超时时间   连接超时,响应超时 10.适配各种机型.4.4和之前版本  2.3  4.1 5.0 4种网络连接方式提供的功能对比表格: 缓存 重试 Https/Http 稳定性 C

ADO.NET 连接方式进行数据访问

1. 连接环境简介 1.1. 连接环境的特点 ? 连接环境是指用户在这种环境下始终保持与数据源的连接 ? 优点 –环境易于实施安全控制 – 同步问题易于控制 ? 数据实时性优于其他环境 ? 缺点 – 必须保持持续的网络连接 – 扩展性差 1.2. 连接环境下的对象模型 ? XxxConnection – 建立与数据源的连接,如SqlConnection 用于建立与Microsoft SQLServer? 的连接,OleDbConnection用于建立与任何支持OLEDB 的数据源的连接 ? Xx

广播接受者判断网络连接状态

需求:网络连接分三种状态:无网络.移动数据.WIFI public class ConnectionChangeReceiver extends BroadcastReceiver { private AlertDialog alertDialog; //标记的作用是为了避免对话框弹出多次 private boolean isConnect = false;//标记是否连接 private boolean isGPRS = false;//标记连接方式是移动网络 private boolean

[VirtaulBox]网络连接设置

由于前几天老师要检查大作业,而我们的数据库是放在虚拟机里的(不想在本机里放太多东西,保持轻便快速...), 平时是用的桥接模式,但是考虑到可能教室里不好上网(图书馆底下信号比较差...),所以就试了试断网情况,却 发现无法连接到数据库,因此专门找了资料学习了一下虚拟机的网络环境,网上信息比较杂,粘贴党太多,害苦了 我,因此写这篇文章供大家参考,也供自己以后参考.全是经过测试的,绝非粘贴. 本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.