go 网络编程

Posted huay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 网络编程相关的知识,希望对你有一定的参考价值。

网络编程

tcp

 

1.tcp客户端服务端实现

server/server.go

技术图片
package main

import (
    "fmt"
    "net"
)

/*
tcp客户端服务端实现
*/

func process(conn net.Conn){
    //这里我们循环接收客户端发送的消息
    defer conn.Close()

    for{
        //创建一个新的切片
        buf:=make([]byte,1024)
        //conn.Read(buf)
        //1.等待客户端通过conn发送消息
        //2.如果客户端没有write[发送],那么协程就阻塞在这里
        fmt.Printf("服务器在等待客户端%s 发送消息
",conn.RemoteAddr().String())
        n,err:=conn.Read(buf)//从conn读取
        if err!=nil{
            fmt.Printf("客户端退出 err=%v",err)
            return
        }
        //3.显示客户端发送的内容,到服务器的终端
        fmt.Print(string(buf[:n]))
    }
}

func main(){
    fmt.Println("服务器开始监听。。")
    //net.Listen("tcp","0.0.0.0:8888")
    listen,err:=net.Listen("tcp","0.0.0.0:8888")
    if err!=nil{
        fmt.Println("listen err=",err)
        return
    }
    defer listen.Close()//延时关闭listen

    //循环等待客户端连接
    for{
        //等待客户端连接
        fmt.Println("等待客户端")
        conn,err:=listen.Accept()
        if err!=nil{
            fmt.Println("Accept() en=",err)
        }else{
            fmt.Printf("Accept() suc con=%v 客户端ip=%v
",conn,conn.RemoteAddr().String())
        }
        //这里准备一个协程,为客户端服务
        go process(conn)
    }
    fmt.Printf("listen suc=%v
",listen)
}
View Code

client/client.go

技术图片
package main

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

func main(){
    conn,err:=net.Dial("tcp","192.168.1.107:8888")
    if err!=nil{
        fmt.Println("client dial err=",err)
        return
    }
    //功能一:客户端可以发送单行数据,然后就退出
    reader:=bufio.NewReader(os.Stdin)//os.Stdin 代表标准输入终端
for{

    //从服务端读取一行用户输入,并准备发送给服务器
    line,err:=reader.ReadString(
)
    if err!=nil{
        fmt.Println("readString err=",err)
    }
    line=strings.Trim(line,"
")
    if line=="exit"{
        fmt.Println("客户端退出。。。")
        break
    }
    //再将line发送给服务器
    n,err:=conn.Write([]byte(line))
    if err!=nil{
        fmt.Println("conn.Write err=",err)
    }
    fmt.Printf("客户端发送了%d字节的数据",n)

}
}
View Code

2.

以上是关于go 网络编程的主要内容,如果未能解决你的问题,请参考以下文章

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

VSCode自定义代码片段14——Vue的axios网络请求封装