码迷,mamicode.com
首页 > 其他好文 > 详细

go 网络编程

时间:2020-01-13 18:14:20      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:add   pen   event   监听   src   class   func   byte   return   

网络编程

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 发送消息\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")
    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\n",conn,conn.RemoteAddr().String())
        }
        //这里准备一个协程,为客户端服务
        go process(conn)
    }
    fmt.Printf("listen suc=%v\n",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(\n)
    if err!=nil{
        fmt.Println("readString err=",err)
    }
    line=strings.Trim(line,"\r\n")
    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.

go 网络编程

标签:add   pen   event   监听   src   class   func   byte   return   

原文地址:https://www.cnblogs.com/huay/p/12188409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!