Go語言 網(wǎng)絡編程

TCP編程

服務器端代碼

package main

import (
    "fmt"
    "io"
    "net"
)

func process(conn net.Conn){
    //循環(huán)接收數(shù)據(jù)
    defer conn.Close()

    for{

        buf := make([]byte,1024)
        //等待客戶端發(fā)送信息
        fmt.Println("服務器在等待輸入",conn.RemoteAddr().String())
        n,err :=conn.Read(buf) //沒有客戶端write發(fā)送,阻塞
        if err !=nil{
            fmt.Println("服務器端Read err", err)
            return
        }

        if err == io.EOF{
            fmt.Println("客戶端退出")
            return
        }
        //顯示客戶端發(fā)送的內容
        fmt.Print(string(buf[:n]))
    }
}


func main(){

    listen, err :=net.Listen("tcp","127.0.0.1:8888")
    if err != nil{
        fmt.Println("Listen Error=",err)
        return
    }

    defer listen.Close()//

    for {

        fmt.Println("等待連接")
        conn,err := listen.Accept()

        if err !=nil{
            fmt.Println("Accept 出錯了")
        }else {
            fmt.Println("Accet success=%v",conn)
            fmt.Println("客戶端IP",conn.RemoteAddr().String())

        }

        go process(conn)

    }

    fmt.Printf("Listen=%v",listen)



}

客戶端代碼

package main

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

func main(){

   conn, err:=net.Dial("tcp", "127.0.0.1:8888")
    if err != nil{
        fmt.Println("Dial失敗=",err)
        return
    }
    fmt.Println("conn成功",conn)

    reader :=bufio.NewReader(os.Stdin)//標準輸入
    //從終端讀取一行數(shù)據(jù),發(fā)送給服務器
    line, err :=reader.ReadString('\n')
    if err !=nil{
        fmt.Println("read err", err)
    }
    //將Line發(fā)送
    n,err:=conn.Write([]byte(line))
  if err !=nil{
    fmt.Println("conn write err",err)
  }
  fmt.Println("客戶端發(fā)送了",n)
}

客戶端循環(huán)輸入,輸入exit結束

Server代碼

package main

import (
    "fmt"
    "net"
)

func process(conn net.Conn){
    //循環(huán)接收數(shù)據(jù)
    defer conn.Close()

    for{

        buf := make([]byte,1024)
        //等待客戶端發(fā)送信息
        fmt.Println("服務器在等待輸入",conn.RemoteAddr().String())
        n,err :=conn.Read(buf) //沒有客戶端write發(fā)送,阻塞
        if err !=nil{
            fmt.Println("服務器端Read err", err)
            return
        }

        //顯示客戶端發(fā)送的內容
        fmt.Print(string(buf[:n]))
    }
}

func main(){

    listen, err :=net.Listen("tcp","127.0.0.1:8888")
    if err != nil{
        fmt.Println("Listen Error=",err)
        return
    }

    defer listen.Close()//

    for {

        fmt.Println("等待連接")
        conn,err := listen.Accept()

        if err !=nil{
            fmt.Println("Accept 出錯了")
        }else {
            fmt.Println("Accet success=%v",conn)
            fmt.Println("客戶端IP",conn.RemoteAddr().String())

        }

        go process(conn)

    }

    fmt.Printf("Listen=%v",listen)
}

Client代碼

package main

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

func main(){

   conn, err:=net.Dial("tcp", "127.0.0.1:8888")
    if err != nil{
        fmt.Println("Dial失敗=",err)
        return
    }
    fmt.Println("conn成功",conn)

    reader :=bufio.NewReader(os.Stdin)//標準輸入
    for {
        //從終端讀取一行數(shù)據(jù),發(fā)送給服務器
        line, err := reader.ReadString('\n')
        if err != nil {
            fmt.Println("read err", err)
        }

        //如果輸入為exit退出

        line=strings.Trim(line,"\r\n")
        if line =="exit"{
            fmt.Println("客戶端退出")
            break
        }
        //將Line發(fā)送
        n, err := conn.Write([]byte(line+"\n"))
        if err != nil {
            fmt.Println("conn write err", err)
        }
        fmt.Println("客戶端發(fā)送了", n)

    }

}

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容