亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Golang > 正文

golang網(wǎng)絡(luò)socket粘包問題的解決方法

2020-04-01 19:10:50
字體:
供稿:網(wǎng)友

本文實(shí)例講述了golang網(wǎng)絡(luò)socket粘包問題的解決方法。分享給大家供大家參考,具體如下:

看到很多人問這個(gè)問題, 今天就寫了個(gè)例子, 希望能幫助大家

首先說一下什么是粘包:百度上比較通俗的說法是指TCP協(xié)議中,發(fā)送方發(fā)送的若干包數(shù)據(jù)到接收方接收時(shí)粘成一包,從接收緩沖區(qū)看,后一包數(shù)據(jù)的頭緊接著前一包數(shù)據(jù)的尾

解決方案如下:

服務(wù)端:

復(fù)制代碼 代碼如下:
package main
import (
    "bytes"
    "encoding/binary"
    "fmt"
    "io"
    "net"
)
func main() {
    // 監(jiān)聽端口
    ln, err := net.Listen("tcp", ":6000")
    if err != nil {
        fmt.Printf("Listen Error: %s/n", err)
        return
    }
    // 監(jiān)聽循環(huán)
    for {
        // 接受客戶端鏈接
        conn, err := ln.Accept()
        if err != nil {
            fmt.Printf("Accept Error: %s/n", err)
            continue
        }
        // 處理客戶端鏈接
        go handleConnection(conn)
    }
}
func handleConnection(conn net.Conn) {
    // 關(guān)閉鏈接
    defer conn.Close()
    // 客戶端
    fmt.Printf("Client: %s/n", conn.RemoteAddr())
    // 消息緩沖
    msgbuf := bytes.NewBuffer(make([]byte, 0, 10240))
    // 數(shù)據(jù)緩沖
    databuf := make([]byte, 4096)
    // 消息長(zhǎng)度
    length := 0
    // 消息長(zhǎng)度uint32
    ulength := uint32(0)
    // 數(shù)據(jù)循環(huán)
    for {
        // 讀取數(shù)據(jù)
        n, err := conn.Read(databuf)
        if err == io.EOF {
            fmt.Printf("Client exit: %s/n", conn.RemoteAddr())
        }
        if err != nil {
            fmt.Printf("Read error: %s/n", err)
            return
        }
        fmt.Println(databuf[:n])
        // 數(shù)據(jù)添加到消息緩沖
        n, err = msgbuf.Write(databuf[:n])
        if err != nil {
            fmt.Printf("Buffer write error: %s/n", err)
            return
        }
        // 消息分割循環(huán)
        for {
            // 消息頭
            if length == 0 && msgbuf.Len() >= 4 {
                binary.Read(msgbuf, binary.LittleEndian, &ulength)
                length = int(ulength)
                // 檢查超長(zhǎng)消息
                if length > 10240 {
                    fmt.Printf("Message too length: %d/n", length)
                    return
                }
            }
            // 消息體
            if length > 0 && msgbuf.Len() >= length {
                fmt.Printf("Client messge: %s/n", string(msgbuf.Next(length)))
                length = 0
            } else {
                break
            }
        }
    }
}

 

客戶端:

復(fù)制代碼 代碼如下:
package main
import (
    "bytes"
    "encoding/binary"
    "fmt"
    "net"
    "time"
)
func main() {
    // 鏈接服務(wù)器
    conn, err := net.Dial("tcp", "127.0.0.1:6000")
    if err != nil {
        fmt.Printf("Dial error: %s/n", err)
        return
    }
    // 客戶端信息
    fmt.Printf("Client: %s/n", conn.LocalAddr())
    // 消息緩沖
    msgbuf := bytes.NewBuffer(make([]byte, 0, 1024))
    // 消息內(nèi)容
    message := []byte("我是utf-8的消息")
    // 消息長(zhǎng)度
    messageLen := uint32(len(message))
    // 消息總長(zhǎng)度
    mlen := 4 + len(message)
    // 寫入5條消息
    for i := 0; i < 10; i++ {
        binary.Write(msgbuf, binary.LittleEndian, messageLen)
        msgbuf.Write(message)
    }
    // 單包發(fā)送一條消息
    conn.Write(msgbuf.Next(mlen))
    time.Sleep(time.Second)
    // 單包發(fā)送三條消息
    conn.Write(msgbuf.Next(mlen * 3))
    time.Sleep(time.Second)
    // 發(fā)送不完整的消息頭
    conn.Write(msgbuf.Next(2))
    time.Sleep(time.Second)
    // 發(fā)送消息剩下部分
    conn.Write(msgbuf.Next(mlen - 2))
    time.Sleep(time.Second)
    // 發(fā)送不完整的消息體
    conn.Write(msgbuf.Next(mlen - 6))
    time.Sleep(time.Second)
    // 發(fā)送消息剩下部分
    conn.Write(msgbuf.Next(6))
    time.Sleep(time.Second)
    // 多段發(fā)送
    conn.Write(msgbuf.Next(mlen + 2))
    time.Sleep(time.Second)
    conn.Write(msgbuf.Next(-2 + mlen - 8))
    time.Sleep(time.Second)
    conn.Write(msgbuf.Next(8 + 1))
    time.Sleep(time.Second)
    conn.Write(msgbuf.Next(-1 + mlen + mlen))
    time.Sleep(time.Second)
    // 關(guān)閉鏈接
    conn.Close()
}

 

希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久久大胆人体视频| av软件在线观看| 偷偷www综合久久久久久久| 欧美又大又硬又粗bbbbb| 污污的网站在线免费观看| 国产精品久线在线观看| 国产色产综合色产在线视频| 天海翼一区二区三区免费| 国产在线观看a| 成人精品视频一区二区三区| 欧美疯狂xxxx大交乱88av| 国产一区二区三区福利| 可以在线看黄的网站| 亚洲精华液一区二区三区| 奇米影视888狠狠狠777不卡| 国内久久精品视频| 国产精品无码人妻一区二区在线| 精品一区二区三区在线| 欧美极品视频| 久久mv成人精品亚洲动漫| 国产成人久久久精品一区| 狠狠97人人婷婷五月| 日韩av免费看| 视频一区二区精品的福利| 又色又爽又黄无遮挡的免费视频| 中国丰满熟妇xxxx性| 色www亚洲国产阿娇yao| 日本激情视频网站| 欧美三级午夜理伦三级| 国产无遮挡一区二区三区毛片日本| 日韩欧美成人网| 黄色小网站在线观看| 好看的亚洲午夜视频在线| 香蕉视频1024| 亚洲免费播放| 日本午夜精品久久久| 九色porny极品| 日韩中文首页| 欧美一卡在线观看| 毛片视频免费| 四虎精品成人免费观看| 香蕉av一区二区| 日韩电影一区| 久久中文欧美| av在线女优影院| 亚洲xxx视频| 91探花在线观看| 日韩欧美三级在线| 午夜两性免费视频| 成人在线视频网址| 亚洲+小说+欧美+激情+另类| 夫妻免费无码v看片| 男人天堂亚洲天堂| 九色国产蝌蚪| 久久国产综合精品| 香蕉成人啪国产精品视频综合网| 综合网在线观看| 在线观看污视频| 免费中文字幕日韩欧美| 亚洲中文字幕在线一区| 亚洲视频国产| 中文字幕2019第三页| 久久综合另类图片小说| 亚洲午夜精品久久久久久app| 久草成人在线| 久久精品成人欧美大片古装| 97人妻精品一区二区三区动漫| 亚洲国产精品电影在线观看| 69久久夜色| 欧美日韩xxxx| 久久精品一二三| 欧美成人性战久久| 久久99久久久精品欧美| 99热这里只有精品2| 国产精品探花在线观看| 国产亚洲精品免费| 污污视频在线免费观看| 中文字幕成在线观看| wwwav91com| 九色资源网91| av成人老司机| 精品欧美一区二区久久久| 亚洲av无码乱码在线观看性色| 欧美黑人巨大| 男插女免费视频| 国产jk精品白丝av在线观看| 精品视频123区在线观看| 成人动漫一区| 天天曰天天操| 成人高清dvd| 成人欧美一区二区三区的电影| 欧美日韩伦理| 亚州国产精品久久久| 天堂99x99es久久精品免费| 性xxxx欧美老肥妇牲乱| 欧美日韩18| 人妻无码一区二区三区久久99| 欧美成人免费在线视频| 国产免费内射又粗又爽密桃视频| 精品国产一区二区三区日日嗨| 欧美高清3dfreexxxx性| 疯狂试爱三2浴室激情视频| 国产又粗又黄又猛| 91成人天堂久久成人| 青青青视频在线| 国产精品23p| 国产嫩草一区二区三区在线观看| 全色精品综合影院| 国产亚洲欧洲高清一区| 午夜精品偷拍| 欧美性欧美巨大黑白大战| 欧美13~18sex性hd| 亚洲国产综合91精品麻豆| 91视频青青草| 4438x成人网最大色成网站| 欧美一区二区精品久久911| 国产成人精品免费视频网站| 日本人妻熟妇久久久久久| 久久露脸国产精品| 国内精品久久99人妻无码| 嘿咻视频在线看| av电影免费在线看| 日韩视频欧美视频| 亚洲一区电影777| 黑人精品视频| www.欧美精品一二区| 日韩av视屏| 久久精品国产一区二区电影| 少妇精品无码一区二区免费视频| 日本一道本久久| 久久综合偷偷噜噜噜色| 久久人人九九| 羞羞网站在线观看| 色婷婷综合久久久久中文| www.色视频| 国产精品一区二区三区在线观| 91精品久久久久久久久久久久久久| 国产精品免费久久久| 国产麻豆精品一区| 91人人澡人人爽| 日本一二区不卡| 欧美丰满嫩嫩电影| 中文字幕黄色大片| 欧美大片日本大片免费观看| 欧美日韩一区二区在线观看| 国产黄色一区| 中文字幕亚洲综合久久筱田步美| 91精品中文字幕一区二区三区| 欧美成人黑人猛交| 国产麻豆入在线观看| 逼特逼视频在线观看| 欧美精品亚洲一区二区在线播放| 亚洲欧洲激情在线乱码蜜桃| 手机成人在线| 97视频中文字幕| 亚洲欧洲在线免费| 欧美成人在线免费| 成年人三级网站| 91久久亚洲| 丰满饥渴老女人hd| 久久天堂久久| 国产精品一区二区性色av| 五月天激情丁香| 亚洲成人福利| 国产精品suv一区二区69| 中文字幕人妻无码系列第三区| 99国内精品久久久久久久| 日韩美女天天操| 在线免费一区三区| 日本不卡免费播放| 五月天激情播播| 免费a级毛片永久免费| 日韩精品第1页| 粉嫩的18在线观看极品精品| 欧美婷婷在线| 免费观看h电影在线观看| 污污免费网站| 日韩精品视频免费播放| 99re在线精品| 国产精品自在| 影音先锋中文在线播放| 成人在线国产| 高清无码视频直接看| 91免费欧美精品| 中文字幕一区二区人妻痴汉电车| 亚洲天堂avav| 欧美白人最猛性xxxxx69交| 亚洲成人在线观看视频| 国产欧美综合视频| 精品成人av| 国产丝袜美女| 久久久电影一区二区三区| 8x福利精品第一导航| 中文在线观看免费视频| 亚洲精品999| 国产乱色国产精品免费视频| 国产免费色视频| 日韩1区2区3区| 日韩视频在线观看免费| 深夜福利视频在线免费观看| 不用播放器成人网| 另类图片亚洲另类| 日操夜操天天操| 在线观看欧美日韩电影| 国产欧美日韩麻豆91| 久久久久久久性潮| 日韩欧美成人激情| 国产一级做a爱免费视频| japanese23hdxxxx日韩| 亚洲黄色大片| 亚洲免费视频成人| 国产精品久久久久永久免费观看| 精品午夜一区二区三区在线观看| 久久久久亚洲av无码a片| 久久久久久网站| 国产精品欧美大片| 国产精品无码乱伦| 国产精品传媒麻豆hd| 蜜桃免费在线| 国产黄a三级三级看三级| 国产精品免费一区二区三区观看| 在线观看国产精品91| 免费高清不卡av| 懂色av中文一区二区三区| 欧美日韩国产首页在线观看| 久久香蕉综合色一综合色88| 97视频免费看| 久久久久高清精品| 天干夜天天夜天干天ww| 国产欧美久久久精品影院| 嫩草黄色影院| 在线视频你懂得| 亚洲一区二区黄| 三年中文高清在线观看第6集| 国产精品亚洲自拍| 欧美激情亚洲精品| 成人免费在线视频网址| 成人h动漫精品一区二区无码| 国产精品第七页| 欧美日本视频在线观看| 亚洲中文字幕在线一区| 丝袜久久网站| 青青草原亚洲| 国产精品资源| 国产精品午夜剧场| 欧洲亚洲免费视频| 成人午夜电影在线播放| 亚洲人精选亚洲人成在线| 国产精品毛片aⅴ一区二区三区| av激情在线观看| 欧美亚洲另类在线| 国内成人免费视频| 136国产福利精品导航网址应用| 女人让男人操自己视频在线观看| 国产一级片视频| 91麻豆精品91久久久久久清纯| 91污色多多| 国语精品中文字幕| 一区二区三区毛片免费| 欧美日韩午夜电影网| 91福利视频免费观看| 免费网站在线高清观看| 国产一区亚洲| 色琪琪原网站亚洲香蕉| 青娱乐极品盛宴一区二区| 亚洲一区二区三区成人| 欧美激情黑白配| 国产短剧电视剧免费观看| av一区二区三区免费| 亚洲已满18点击进入久久| 91禁外国网站| 国产在线观看91一区二区三区| 久久综合给合久久狠狠狠97色69| 黑料吃瓜在线观看| 在线精品国产成人综合| 色就是色亚洲色图| 一二三四在线观看视频韩国| 欧美日韩国产精品自在自线| 成人3d动漫一区二区三区91| 欧洲激情视频| 亚洲午夜久久久久| 秋霞av一区二区三区| 亚洲少妇在线| 欧美激情不卡| 高清av免费看| 国产亚洲第一区| 国产精品白嫩美女在线观看| 吴梦梦av在线| 午夜视频在线观| 国产无遮挡裸体视频在线观看| 91精品国产高久久久久久五月天| 在线久久视频| 亚洲成人久久影院| 日本高清精品| 日本一区二区三区免费乱视频| 欧美r级电影在线观看| av日韩中文字幕| 国产高清一区二区| 亚洲一区二区三区精品视频| 欧美日韩午夜在线| av黄色在线播放| 噜噜噜久久亚洲精品国产品小说| 欧美日韩在线观看一区二区三区| 国产亚洲欧洲黄色| 日韩欧美精品| 精品免费av在线| 国产日韩欧美在线| 91精品国产99久久久久久| 天天干 夜夜操| ijzzijzzij亚洲大全| 久久夜色邦福利网| 岛国在线视频免费看| 国产欧美一区二区精品忘忧草| 白白色视频在线| 欧美多人爱爱视频网站| www欧美日韩| 999国产精品视频| 午夜视频久久久久久| 国产啪精品视频网站| 国产一区二三区好的| 久久九九影视网| 亚洲妇女av| 国产精品对白交换视频| 国产人成一区二区三区影院| 久久久亚洲午夜电影| 精品美女永久免费视频| 秋霞影院午夜丰满少妇在线视频| 国产三级三级在线观看|