• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2017年12月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456


            專注即時通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215465
            • 排名 - 118

            最新評論

            閱讀排行榜

            package main

            import (
                "bytes"
                "fmt"
                "io"
                "net"

                "github.com/itfantasy/gonode/utils/timer"
                kcp "github.com/xtaci/kcp-go"
            )

            func main() {
                testKcp()
            }

            func testKcp() {
                testKcpServer()
                //testKcpClient()
            }

            func testKcpServer() {
                listen, err := kcp.Listen("0.0.0.0:10086")
                if err != nil {
                    fmt.Println(err)
                    return
                }
                defer listen.Close()
                for {
                    conn, err := listen.Accept()
                    if err != nil {
                        fmt.Println(err)
                        return
                    }
                    go handleConnS(conn)
                }
            }

            func handleConnS(conn net.Conn) {
                for {
                    fmt.Println("recv -----> ")
                    datas := bytes.NewBuffer(nil)
                    var buf [512]byte

                    n, err := conn.Read(buf[0:])
                    fmt.Println(n)
                    datas.Write(buf[0:n])
                    if err != nil {
                        fmt.Println(err.Error())
                    }

                    fmt.Print("datas : ")
                    fmt.Println(string(datas.Bytes()))
                    conn.Write(datas.Bytes())
                }
            }

            func testKcpClient() {
                conn, err := kcp.Dial("127.0.0.1:10086")
                if err != nil {
                    fmt.Println(err)
                    return
                }
                for {
                    fmt.Println("send ------> ")
                    ret, err2 := conn.Write([]byte("hello kcp!!"))
                    if err2 != nil {
                        fmt.Println(err2)
                    } else {
                        fmt.Println(ret)
                    }
                    timer.Sleep(1000)
                }
            }

            func handleConnC(conn net.Conn) {
                for {
                    fmt.Println("recv -----> ")
                    datas := bytes.NewBuffer(nil)
                    var buf [512]byte

                    n, err := conn.Read(buf[0:])
                    datas.Write(buf[0:n])
                    if err != nil {
                        fmt.Println(err.Error())
                    }

                    fmt.Print("datas : ")
                    fmt.Println(datas.Bytes())
                }
            }

            和最簡單的tcp實例socket編程有兩點不同:
            1. 無需使用 err == io.EOF 來判斷一個數(shù)據(jù)包的完結(jié),因為kcp底層基于udp的frame而并非tcp的stream
            2. 無法使用 ioutils.ReadAll(net.Conn) 來讀取本次接收的全部數(shù)據(jù),初步懷疑和第1點有關(guān)
            posted on 2017-12-11 17:16 思月行云 閱讀(3065) 評論(0)  編輯 收藏 引用 所屬分類: Golang
            国产精品VIDEOSSEX久久发布| 97精品依人久久久大香线蕉97 | 国内精品久久久久影院优| 999久久久无码国产精品| 久久久久亚洲?V成人无码| 一本色道久久88精品综合| 日本福利片国产午夜久久| 久久婷婷色香五月综合激情| 7777久久亚洲中文字幕| 久久久久久久综合狠狠综合| 久久精品国产99国产精品澳门| 成人综合久久精品色婷婷| 国产精品成人久久久久久久| 欧美黑人又粗又大久久久| 日韩久久无码免费毛片软件| 久久精品中文字幕久久| 亚洲∧v久久久无码精品| 亚洲精品成人久久久| 久久99精品久久久久久9蜜桃| 久久ZYZ资源站无码中文动漫| 亚洲午夜无码久久久久小说| 亚洲国产成人久久精品动漫| 国产精品无码久久综合| 国内高清久久久久久| 国产99久久久国产精品小说| 久久国产综合精品五月天| 99久久精品费精品国产| 国产美女久久久| 久久精品国产秦先生| 97久久超碰成人精品网站| 欧美噜噜久久久XXX| 久久亚洲AV成人出白浆无码国产| 久久综合亚洲色一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 色综合久久精品中文字幕首页 | 精品久久久久久国产免费了| 99久久精品国产一区二区| 66精品综合久久久久久久| 国产一区二区精品久久岳| 久久se这里只有精品| 热综合一本伊人久久精品|