zoukankan      html  css  js  c++  java
  • go-tcp

    go-tcp编程学习:

    服务端代码:

    package main

    import (
    "fmt"
    "net"
    )

    func process(coon net.Conn) {

    //创建一个切片
    buf := make([]byte, 1024)

    defer coon.Close()

    //循环接收客户端发送的信息
    for {
    n, err := coon.Read(buf)
    if err != nil {
    fmt.Println("coon Read err=", err)
    return
    }

    //显示信息
    fmt.Print(string(buf[:n]))
    }
    }

    func main() {

    //Go--tcp编程
    listen, err := net.Listen("tcp", "0.0.0.0:8888")
    if err != nil {
    //监听失败
    fmt.Println("listen err=", err)
    return
    }

    defer listen.Close()

    //循环等待客户端的连接
    for {
    coon, err := listen.Accept()
    if err != nil {
    fmt.Println("Accept() err=", err)
    } else {
    fmt.Printf("Accept success, clientIp=%v ", coon.RemoteAddr().String())
    }

    //起一个协程服务于客户端
    go process(coon)
    }

    }

    客户端代码:

    package main

    import (
    "fmt"
    "net"
    "bufio"
    "os"
    "strings"
    )

    func main() {

    //client
    coon, err := net.Dial("tcp", "127.0.0.1:8888")
    if err != nil {
    fmt.Println("net.Dial err=", err)
    return
    }

    //创建一个reader
    reader := bufio.NewReader(os.Stdin)

    //循环进行用户输入
    for {

    //从终端读取一行
    line, err := reader.ReadString(' ')
    if err != nil {
    fmt.Println("readString err=", err)
    }

    //判断是否退出
    line = strings.Trim(line, " ")
    if line == "exit" {
    fmt.Printf("client %s exit", coon.RemoteAddr().String())
    break
    }

    //将数据发送给服务端
    _, err = coon.Write([]byte(line + " "))
    if err != nil {
    fmt.Println("coon.Write err=", err)
    }
    }
    }

    效果:

  • 相关阅读:
    css+javascript 仿outlook滑动菜单效果代码
    闭包
    AJAX式多数据源及节点异步加载树_meetrice
    CSS圆角边框表格
    Editplus 3.0 开发ext 教程
    IE右键快速转载到博客
    自已扩展EXT组件(Extending Ext Components)
    Ext程序规划入门
    EXT2联动选框 (Linked Combos Tutorial for Ext 2)
    EXT snippets 笔记
  • 原文地址:https://www.cnblogs.com/lty-fly/p/11880698.html
Copyright © 2011-2022 走看看