zoukankan      html  css  js  c++  java
  • go 网络编程

    网络编程

    tcp

    1.tcp客户端服务端实现

    server/server.go

    package main
    
    import (
        "fmt"
        "net"
    )
    
    /*
    tcp客户端服务端实现
    */
    
    func process(conn net.Conn){
        //这里我们循环接收客户端发送的消息
        defer conn.Close()
    
        for{
            //创建一个新的切片
            buf:=make([]byte,1024)
            //conn.Read(buf)
            //1.等待客户端通过conn发送消息
            //2.如果客户端没有write[发送],那么协程就阻塞在这里
            fmt.Printf("服务器在等待客户端%s 发送消息
    ",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")
        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() en=",err)
            }else{
                fmt.Printf("Accept() suc con=%v 客户端ip=%v
    ",conn,conn.RemoteAddr().String())
            }
            //这里准备一个协程,为客户端服务
            go process(conn)
        }
        fmt.Printf("listen suc=%v
    ",listen)
    }
    View Code

    client/client.go

    package main
    
    import (
        "bufio"
        "fmt"
        "net"
        "os"
        "strings"
    )
    
    func main(){
        conn,err:=net.Dial("tcp","192.168.1.107:8888")
        if err!=nil{
            fmt.Println("client dial err=",err)
            return
        }
        //功能一:客户端可以发送单行数据,然后就退出
        reader:=bufio.NewReader(os.Stdin)//os.Stdin 代表标准输入终端
    for{
    
        //从服务端读取一行用户输入,并准备发送给服务器
        line,err:=reader.ReadString('
    ')
        if err!=nil{
            fmt.Println("readString err=",err)
        }
        line=strings.Trim(line,"
    ")
        if line=="exit"{
            fmt.Println("客户端退出。。。")
            break
        }
        //再将line发送给服务器
        n,err:=conn.Write([]byte(line))
        if err!=nil{
            fmt.Println("conn.Write err=",err)
        }
        fmt.Printf("客户端发送了%d字节的数据",n)
    
    }
    }
    View Code

    2.

  • 相关阅读:
    Recommended Books for Algo Trading in 2020
    Market Making is simpler than you think!
    Top Crypto Market Makers of 2020
    Top Crypto Market Makers, Rated and Reviewed
    爬取伯乐在线文章(五)itemloader
    爬取伯乐在线文章(四)将爬取结果保存到MySQL
    爬取伯乐在线文章(三)爬取所有页面的文章
    爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
    爬取伯乐在线文章(一)
    爬虫去重策略
  • 原文地址:https://www.cnblogs.com/huay/p/12188409.html
Copyright © 2011-2022 走看看