项目结构如下图: server.go中的代码如下:
package main import ( "fmt" "net" //做网络socket开发时,net包含有我们需要所有的方法和函数 _"io" ) func process(conn net.Conn) { defer conn.Close() //关闭conn //这里我们循环的接收客户端发送的数据 for { buf := make([]byte, 1024)//创建一个新的切片 //conn.Read(buf) //1. 等待客户端通过conn发送信息 //2. 如果客户端没有wrtie[发送],那么协程就阻塞在这里 //fmt.Printf("服务器在等待客户端%s 发送信息\n", 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") //1. tcp 表示使用网络协议是tcp //2. 0.0.0.0:8888 表示在本地监听 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() err=", err) } else { fmt.Printf("Accept() suc con=%v 客户端ip=%v\n", conn, conn.RemoteAddr().String()) } //这里准备其一个协程,为客户端服务 go process(conn) } //fmt.Printf("listen suc=%v\n", listen) }
client.go中的代码如下:
package main import ( "fmt" "net" "bufio" "os" "strings" ) func main() { conn, err := net.Dial("tcp", "127.0.0.1:8888") if err != nil { fmt.Println("client dial err=", err) return } //功能一:客户端可以发送单行数据,然后就退出 reader := bufio.NewReader(os.Stdin) //os.Stdin 代表标准输入[终端] for { //从终端读取一行用户输入,并准备发送给服务器 line, err := reader.ReadString('\n') if err != nil { fmt.Println("readString err=", err) } //如果用户输入的是 exit就退出 line = strings.Trim(line, " \r\n") if line == "exit" { fmt.Println("客户端退出..") break } //再将line 发送给 服务器 _, err = conn.Write([]byte(line + "\n")) if err != nil { fmt.Println("conn.Write err=", err) } } }
测试:启动一个服务器,两个客户端,通讯成功。
网络编程之实现多客户端 连接服务器 并且发送消息代码实现 介绍到这里,更多Go学习请参考编程字典Go教程 和问答部分,谢谢大家对编程字典的支持。
原文链接:https://blog.csdn.net/cui_yonghua/article/details/95213747?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163523372016780265481777%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163523372016780265481777&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-16-95213747.pc_v2_rank_blog_default&utm_term=go&spm=1018.2226.3001.4450