美文网首页
golang实现tcp通信例子

golang实现tcp通信例子

作者: 乐乐J | 来源:发表于2019-02-03 14:49 被阅读4次

tcp/udp ip通信是当前重要的通信方式。

当然对于golang开发者而言,实现tcp通信也是必要的。本文的内容主要是基于《Go语言四十二章经》简书地址:https://www.jianshu.com/nb/29056963的详细讲解
本文的例子分为服务端与客户端两部分:
服务端:

package main

import (
    "bufio"
    "fmt"
    "io"
    "net"
    "time"
)

//tcp server 服务端代码

func main() {
    //定义一个tcp断点
    var tcpAddr *net.TCPAddr
    //通过ResolveTCPAddr实例一个具体的tcp断点
    tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999")
    //打开一个tcp断点监听
    tcpListener,_ := net.ListenTCP("tcp",tcpAddr)
    defer tcpListener.Close()
    fmt.Println("Server ready to read ...")
    //循环接收客户端的连接,创建一个协程具体去处理连接
    for{
        tcpConn,err := tcpListener.AcceptTCP()
        if err!=nil {
            fmt.Println(err)
            continue
        }
        fmt.Println("A client connected :" +tcpConn.RemoteAddr().String())
        go tcpPipe(tcpConn)
    }
}
//具体处理连接过程方法
func tcpPipe(conn *net.TCPConn){
    //tcp连接的地址
    ipStr := conn.RemoteAddr().String()

    defer func() {
        fmt.Println(" Disconnected : " + ipStr)
        conn.Close()
    }()

    //获取一个连接的reader读取流
    reader := bufio.NewReader(conn)
    i:=0
    //接收并返回消息
    for {
        message,err := reader.ReadString('\n')
        if err!=nil || err == io.EOF {
            break
        }
        fmt.Println(string(message))

        time.Sleep(time.Second*3)

        msg := time.Now().String() + conn.RemoteAddr().String() + " Server Say hello! \n"

        b := []byte(msg)

        conn.Write(b)

        i++

        if i>10 {
            break
        }
    }
}


客户端

package main

import (
    "bufio"
    "fmt"
    "io"
    "net"
    "time"
)

func main() {
    var tcpAddr *net.TCPAddr
    tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999")

    conn,err := net.DialTCP("tcp",nil,tcpAddr)

    if err!=nil {
        fmt.Println("Client connect error ! " + err.Error())
        return
    }

    defer conn.Close()

    fmt.Println(conn.LocalAddr().String() + " : Client connected!")

    onMessageReceived(conn)
}

func onMessageReceived(conn *net.TCPConn) {

    reader := bufio.NewReader(conn)
    b := []byte(conn.LocalAddr().String() + " Say hello to Server... \n")
    conn.Write(b)
    for {
        msg, err := reader.ReadString('\n')
        fmt.Println("ReadString")
        fmt.Println(msg)

        if err != nil || err == io.EOF {
            fmt.Println(err)
            break
        }
        time.Sleep(time.Second * 2)

        fmt.Println("writing...")

        b := []byte(conn.LocalAddr().String() + " write data to Server... \n")
        _, err = conn.Write(b)

        if err != nil {
            fmt.Println(err)
            break
        }
    }
}

相关文章

  • golang实现tcp通信例子

    tcp/udp ip通信是当前重要的通信方式。 当然对于golang开发者而言,实现tcp通信也是必要的。本文的内...

  • golang简单实现socket tcp通信

    先做一个服务器端,接受来自客户端的数据,由于没有什么gui来显示数据输出情况,就将从客户端传送的数据写入一个文件中...

  • 从源码角度看Golang的TCP Socket(epoll)实现

    从源码角度看Golang的TCP Socket(epoll)实现 Golang的TCP是基于系统的epoll IO...

  • Go语言实现TCP通信

    章节 go 优势 go 实现 TCP 通信 1 go 语言优势 1.1 go 语言优势 2 go 实现TCP通信 ...

  • 一个简单的golang TCP通信例子

    前言 新工作接手了公司的一个使用golang编写的agent程序,用于采集各个机器的性能指标和监控数据,之前使用h...

  • 【go语言学习】网络编程之TCP

    一、go语言实现TCP通信 TCP/IP(Transmission Control Protocol/Intern...

  • ElasticSearch 基于Netty的通信原理

    ElasticSearch由Transport负责通信,基于TCP通信采用Netty实现,采用Plugin构建,具...

  • Java 基础 49 TCP协议

    1.1 TCP 协议简介   TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建soc...

  • Sockets简介

    Sockets通信 TCP协议面向连接、可靠的、有序的、以字节流的方式发送数据。 基于TCP协议实现网络通信的类:...

  • TCP与UDP区别

    tcp与udp都属于网络通信传输层的传输协议 TCP 举个例子:帮助理解tcp的原理流程,比如说打电话场景:A(发...

网友评论

      本文标题:golang实现tcp通信例子

      本文链接:https://www.haomeiwen.com/subject/acbysqtx.html