Go语言 网络编程

TCP编程

服务器端代码

package main

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

func process(conn net.Conn){
    //循环接收数据
    defer conn.Close()

    for{

        buf := make([]byte,1024)
        //等待客户端发送信息
        fmt.Println("服务器在等待输入",conn.RemoteAddr().String())
        n,err :=conn.Read(buf) //没有客户端write发送,阻塞
        if err !=nil{
            fmt.Println("服务器端Read err", err)
            return
        }

        if err == io.EOF{
            fmt.Println("客户端退出")
            return
        }
        //显示客户端发送的内容
        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)//标准输入
    //从终端读取一行数据,发送给服务器
    line, err :=reader.ReadString('\n')
    if err !=nil{
        fmt.Println("read err", err)
    }
    //将Line发送
    n,err:=conn.Write([]byte(line))
  if err !=nil{
    fmt.Println("conn write err",err)
  }
  fmt.Println("客户端发送了",n)
}

客户端循环输入,输入exit结束

Server代码

package main

import (
    "fmt"
    "net"
)

func process(conn net.Conn){
    //循环接收数据
    defer conn.Close()

    for{

        buf := make([]byte,1024)
        //等待客户端发送信息
        fmt.Println("服务器在等待输入",conn.RemoteAddr().String())
        n,err :=conn.Read(buf) //没有客户端write发送,阻塞
        if err !=nil{
            fmt.Println("服务器端Read err", err)
            return
        }

        //显示客户端发送的内容
        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 {
        //从终端读取一行数据,发送给服务器
        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发送
        n, err := conn.Write([]byte(line+"\n"))
        if err != nil {
            fmt.Println("conn write err", err)
        }
        fmt.Println("客户端发送了", n)

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容