go语言之TCP编程

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main
 
import (
    "fmt"
    "net"
)
 
func process(conn net.Conn){
    defer conn.Close()
    for{
        buf:=make([]byte,1024)
        fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String())
        n,err:=conn.Read(buf)//从conn读取数据
        if err!=nil{
            fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String())
            return
        }
        fmt.Println(string(buf[:n]))
    }
}
 
func main(){
    fmt.Println("服务器开始监听")
    listen,err:=net.Listen("tcp","0.0.0.0:7077")
    if err!=nil{
        fmt.Println("Listen出错!",err)
        return
    }
    defer listen.Close()
 
    //循环等待客户端来连接
    for{
        fmt.Println("等待客户端来连接")
        conn,err:=listen.Accept()
        if err!=nil{
            fmt.Println("Accept出错",err)
        }else{
            fmt.Printf("Accept() suc con=%v 客户端 ip=%v\n", conn, conn.RemoteAddr().String())
        }
        //这里准备一个协程,为客户端服务
        go process(conn)
    }
}

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main
 
import (
    "bufio"
    "fmt"
    "net"
    "os"
)
 
func main(){
    conn,err:=net.Dial("tcp","127.0.0.1:7077")
    if err!=nil{
        fmt.Println("Dial出错",err)
        return
    }
    //功能一:客户端可以发送单行数据,然后就退出
    reader := bufio.NewReader(os.Stdin) //os.Stdin 代表
    //从终端读取一行用户输入,并准备发送给服务器
    line, err := reader.ReadString('\n')
    if err != nil {
        fmt.Println("readString err=", err)
    }
    //再将 line 发送给 服务器
    n, err := conn.Write([]byte(line))
    if err != nil {
        fmt.Println("conn.Write err=", err)
    }
    fmt.Printf("客户端发送了 %d 字节的数据,并退出", n)
 
}

  

posted @   ☞@_@  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示