博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go-简单的c/s通讯
阅读量:6006 次
发布时间:2019-06-20

本文共 2038 字,大约阅读时间需要 6 分钟。

网络编程的程序员,最基本的前后端tcp通讯框架要懂

服务器文件:server.go

package mainimport (    "fmt"    "net")func main() {    fmt.Println("Starting the server")    // create listener    listener, err := net.Listen("tcp", "localhost:8001")    if err != nil{        fmt.Println("Error listening", err.Error())        return    }    //listen and receive client's connection    for {        conn, err := listener.Accept()        if err != nil{            fmt.Println("Error accepting", err.Error())            return        }        go doServerStuff(conn)    }}func doServerStuff(conn net.Conn) {    for {        buf := make([]byte, 512)        _, err := conn.Read(buf)        if err != nil{            fmt.Println("Error reading", err.Error())            return    // stop        }        fmt.Printf("Received data : %v", string(buf))    }}

 

客户端文件:client.go

package mainimport (    "net"    "fmt"    "bufio"    "os"    "strings")func main() {    conn, err := net.Dial("tcp", "localhost:50000")    if err != nil{        fmt.Println("Error dialing", err.Error())        return    }    inputReader := bufio.NewReader(os.Stdin)    fmt.Println("First, what is your name?")    clientName, _ := inputReader.ReadString('\n')    //fmt.Printf("CLIENTNAME %s", clientName)    trimmedClient := strings.Trim(clientName, "\r\n")    for {        fmt.Println("What to send to the server? Type Q to quit.")        input, _ := inputReader.ReadString('\n')        trimmedInput := strings.Trim(input, "\r\n")        if trimmedInput == "Q"{            return        }        _, err = conn.Write([]byte(trimmedClient + " says: " + trimmedInput))    }}

 

 

 so easy!

PS:

  我们在 main() 创建了一个 net.Listener 的变量,他是一个服务器的基本函数:用来监听和接收来自客户

端的请求(来自localhost即IP地址为127.0.0.1端口为50000基于TCP协议)。这个 Listen() 函数可以返回
一个 error 类型的错误变量。用一个无限for循环的 listener.Accept() 来等待客户端的请求。客户端的请求
将产生一个 net.Conn 类型的连接变量。然后一个独立的携程使用这个连接执行 doServerStuff() ,开始
使用一个512字节的缓冲 data 来读取客户端发送来的数据并且把它们打印到服务器的终端;当客户端发送
的所有数据都被读取完成时,携程就结束了。这段程序会为每一个客户端连接创建一个独立的携程。必须
先运行服务器代码,再运行客户端代码。

转载于:https://www.cnblogs.com/huangliang-hb/p/7693756.html

你可能感兴趣的文章
Hive分桶表
查看>>
oracle10g 启动时报错:ORA-32004 ORA-19905
查看>>
思科分发列表过滤路由(RIP)动态路由协议篇
查看>>
可登录的用户数量是1.6万个,软件的性能得到充分的考验
查看>>
[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表
查看>>
[译] ES2018(ES9)的新特性
查看>>
Javascript基础复习 数据类型
查看>>
C# Selenium 破解腾讯滑动验证
查看>>
bom与dom的区别
查看>>
Matlab2012a下配置LibSVM—3.18
查看>>
Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)
查看>>
修复CefSharp浏览器组件中文输入Bug
查看>>
正则与sed,grep,awk三剑客
查看>>
诊断一句SQL不走索引的原因
查看>>
iOS开发拓展篇—UIDynamic(简单介绍)
查看>>
Linux pipe函数
查看>>
图片标注工具LabelImg使用教程
查看>>
(原創) 如何設計一個數位相框? (SOC) (Quartus II) (SOPC Builder) (Nios II) (TRDB-LTM) (DE2-70)...
查看>>
/etc/profile文件内容
查看>>
量词 匹配优先与忽略优先
查看>>