go簡(jiǎn)單的socket編程

服務(wù)端

package main

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

func process(conn net.Conn){
    var buffer [128]byte

    //這個(gè)循環(huán)的目的是,如果客戶端發(fā)來的數(shù)據(jù)過長(zhǎng),將數(shù)據(jù)切片
    for{
        m,err := conn.Read(buffer[:])
        if err != nil{
            fmt.Println("read data failed")
            break
        }
        fmt.Println("客戶端發(fā)來的數(shù)據(jù)是:",string(buffer[:m]))

        reader := bufio.NewReader(os.Stdin)
        fmt.Print("請(qǐng)輸入服務(wù)端發(fā)送的數(shù)據(jù):")
        sendinfo,err := reader.ReadString('\n')
        if err != nil{
            fmt.Println("讀取服務(wù)端發(fā)送數(shù)據(jù)出錯(cuò)!")
            continue
        }
        sendinfo = strings.TrimSpace(sendinfo)
        if sendinfo == "exit"{
            fmt.Println("退出服務(wù)端")
            return
        }
        conn.Write([]byte(sendinfo))
    }
}

func main(){
    listener,err := net.Listen("tcp","127.0.0.1:9100")
    if err != nil{
        fmt.Println("start server 9100 failed")
        return
    }
    fmt.Println("start server 9100 success")

    for {
        conn,err := listener.Accept()
        if err != nil{
            fmt.Println("accept server fail")
            return
        }
        fmt.Println("accept server success")    //客戶端連接成功打印此日志
        go process(conn)
    }
}

客戶端

package main

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

func main(){
    conn,err := net.Dial("tcp","127.0.0.1:9100")
    if err != nil{
        fmt.Println("connect server 9100 fail")
        return
    }
    fmt.Println("connect server 9100 success")

    reader := bufio.NewReader(os.Stdin)
    for{
        fmt.Print("請(qǐng)輸入:")
        msg,_:=reader.ReadString('\n')
        msg=strings.TrimSpace(msg)
        if msg == "exit"{
            fmt.Println("exit client")
            return
        }
        conn.Write([]byte(msg))

        var buffer [128]byte
        for{
            n,err := conn.Read(buffer[:])
            if err != nil{
                fmt.Println("客戶端讀取數(shù)據(jù)出錯(cuò)")
                break
            }
            fmt.Println("客戶端讀取數(shù)據(jù)是:",string(buffer[:n]))
            break
        }

    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容