go-简单的c/s通讯

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

服务器文件:server.go

package main

import (
    "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 main

import (
    "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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值