GO中 TCP 的receivebuffSize sendBufSize 第一次偶尔失效

wangbintao1992 · · 957 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") fmt.Println(err) server, e := net.ListenTCP("tcp", tcpAddr) fmt.Println(e) for { conn, _ := server.AcceptTCP() util.SetTCPOption(conn) } ``` ```go tcpConn := conn.(*net.TCPConn) tcpConn.SetNoDelay(false) tcpConn.SetWriteBuffer(30000) tcpConn.SetReadBuffer(30000) ``` 在做数据传输时,设置TCP server,client的接受,发送缓冲区大小时,也开启压缩。 但是在server端,偶尔第一次收到的包,读不够长度, 但是后续包都很正常,不知道哪里有问题,server读的太快了,数据还在路上么? 操作系统windows。另外,因为是并行读,所以用for读满可能会乱序,不考虑 <a href="/user/polaris" title="@polaris">@polaris</a> 大佬,您闲的时候给小弟解惑一下呗 ```go func getPartBody(length int, conn net.Conn) ([]byte){ buf := make([]byte, length) num, _ := conn.Read(buf) fmt.Println("read num:", num) //TODO recover if length != num{ panic("数据包异常") } return buf[:num] } fun ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

957 次点击  
加入收藏 微博
3 回复  |  直到 2017-12-21 16:23:14
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传