TCP粘包问题

TCP粘包是指发送方的多个数据包在接收方合并为一个数据包。这主要由Nagle算法在发送端引起的,或者由于接收端未及时处理接收数据导致。通过封包和拆包操作,如在数据包前加上包含数据长度的包头,可以解决粘包问题。
摘要由CSDN通过智能技术生成

TCP粘包问题

什么是TCP粘包

TCP粘包就是指发送方发送的若干数据包到达接受方时粘成了一包。从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。

为什么会出现粘包

主要原因就是TCP数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。

粘包可发生在发送端也可以发生在接收端:

  • 发送端:由Nagle算法导致的粘包。Nagle算法是一种改善网络传输效率的算法。这个算法简单来说,就是当我们提交一段数据给TCP发送时,TCP并不会立刻发送这段数据,而是等待一小段时间卡看看在等待期间是否还有要发送的数据,若有则会一次把两段数据合并成一个大的数据块,进行封包,发送出去。
  • 接收端:由于接收端接收不及时造成的粘包。TCP会把接收到的数据存在自己的缓冲区内,然后通知应用层取数据。当应用层由于某些原因不能及时的把TCP的数据取出来,就会造成TCP缓冲区存放了几段数据。

粘包示例程序

Server端:

package main

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
)

func ServerHandlerErr(err error, where string){
   
	if err != nil{
   
		fmt.Println(err, where)
		os.Exit(1)
	}
}

func Processmsg(conn net.Conn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值