Golang Socket编程小实例

1.服务端监听并处理接收信息

复制代码
package main

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

func process(conn net.Conn){
    defer conn.Close()

    for {
        fmt.Println("服务器的等 待客户端写入……")
        readByte :=make([]byte,2048)
        // 注意这里是将数据读取到readByte byte数组中,读取个数为n,并不是上面的2048
        n,err :=conn.Read(readByte)
        if err==io.EOF{
            fmt.Println("客户端关闭,服务器关闭")
            return
        }
        if err!=nil{
            fmt.Println("服务器的Reader err=",err)
            return
        }
        // 最终获取到的数据, 取数时要注意,是0~n 个不是2048,因为最终读取到的是n
        readStr :=string(readByte[:n])
        fmt.Println("服务器端读取到数据",readStr)
    }
}

func main(){
    fmt.Println("服务器端开始监听^……")
    // 服务端监听 8090
    listen,err :=net.Listen("tcp","127.0.0.1:8090")
    if err!=nil{
        fmt.Println("监听127.0.0.1:8090出错")
return } defer listen.Close()
for{ fmt.Println("等待客户端·连接……") conn,err :=listen.Accept() if err!=nil{ fmt.Println("接收出错",err)
continue } fmt.Println(
"客户端连接成功……") fmt.Println(conn) go process(conn) } }
复制代码

2.客户端连接服务端并发送信息

复制代码
package main

import (
    "fmt"
    "net"
)

func main()  {
    // 建立客户端连接
    conn,err :=net.Dial("tcp","127.0.0.1:8090")
    if err !=nil{
        fmt.Println("建立连接120.0.0.1:8090出错",err)
        return    // 注意 如果连接失败,这里要失败
    }
    fmt.Println("连接120.0.0.1:8090成功!",err)
    defer conn.Close()
    // 发送信息
    whriteStr :="hello word,你好!"
    // 通过conn连接发送信息
    n,err :=conn.Write([]byte(whriteStr))
    if err!=nil{
        fmt.Println("conn whrite err=",err)
    }
    fmt.Println("客户端发送了",n,"个字节并退出")

}
复制代码

 

posted @   酒沉吟  阅读(234)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2014-07-16 MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates)
点击右上角即可分享
微信分享提示