兄弟連區塊鏈技術Go語言教程簡單編寫Echo Server

來源:互聯網
上載者:User

  所有的新技術都經曆了一些成長的痛苦,區塊鏈技術也一樣。但是,儘管它還處於發展的早期階段,但它具有改進許多行業、許多應用和系統的巨大潛力。

  Go語言具有其關鍵特性。Go語言之所以如此強大,是因為它在服務端的開發中總能抓住程式員的痛癢需求,用最直接、簡單、高效、穩定的方式來解決並實現問題。

今天來一個簡單的內容,用golang寫一個簡單的echo server。

TCP/IP協議

大家都知道TCP/IP協議簇是當今網路世界的事實標準協議,與其對應的是OSI的七層模型,對於這七層模型這裡就不再贅述了,這裡只是簡單介紹一下TCP/IP的四層模型。

TCP/IP的四層模型最下面是一個物理層,上面是網路層,再往上就是傳輸層,最後是應用程式層了,分層的概念相信大家都之的,這樣在不同層之間變化就是打包或者解包,簡單來說就是加上頭資訊或者去迴轉資訊。

golang API

golang的net包裡面有很方便的API供我們使用,這個API主要可以劃分成Addr,Listen,Connection,Dialer,IP和其他的一些網路API,例如DNS API等,這裡就不介紹其他的網路API(主要是自己也沒有研究_)。

Addr主要有IPAddr,TCPAddr,UDPAddr和UnixAddr,主要就是不同的地址,這是網路編程的基礎,沒有地址就像寫信不附地址,根本寄不到啊!

Listener主要就是TCPListener,UnixListener(咦,為什麼沒有UDPListener呢?),Listener是一般是服務端需要調用的,因為服務端需要監-聽用戶端呀,時刻看著Y的來不來跟我打招呼啊。

Connection就是串連嗎,它就是兩個節點溝通的橋樑啊,沒有它你就跟你對象搭不上話啊。

Dialer就是要求者啊,當服務端準備好了之後,用戶端就可以Dial一下了,如果順利的話就可以拿到一個Connection,這樣的話就可以跟另一端的人搭上話了。

簡單的Echo Server

好了,現在用一個Echo Server來簡單的展示一下如何使用TCP來進行網路通訊,當然你也可以用UDP。

Server

   package main


   import (

     "net"

     "os"

     "fmt"

     "io"

   )


  const BUFF_SIZE = 1024

  var buff = make([]byte,BUFF_SIZE)


// 接受一個TCPConn處理內容

  func handleConn(tcpConn *net.TCPConn){

    if tcpConn == nil {

      return

    }

    for {

      n,err := tcpConn.Read(buff)

      if err == io.EOF {

        fmt.Printf("The RemoteAddr:%s is closed!\n",tcpConn.RemoteAddr().String())

        return

      }

      handleError(err)

      if string(buff[:n]) == "exit" {

        fmt.Printf("The client:%s has exited\n",tcpConn.RemoteAddr().String())

      }

      if n > 0 {

        fmt.Printf("Read:%s",string(buff[:n]))

      }

    }

  }

// 錯誤處理

  func handleError(err error) {

    if err == nil {

      return

    }

    fmt.Printf("error:%s\n",err.Error())

  }


  func main() {

    if len(os.Args) != 2 {

      fmt.Println("Usage: ")

      return

    }

    port := os.Args[1]

    tcpAddr,err := net.ResolveTCPAddr("tcp4","localhost:"+port)

    handleError(err)

tcpListener,err := net.ListenTCP("tcp4",tcpAddr)  //監聽

    handleError(err)

    defer tcpListener.Close()

    for {

      tcpConn,err := tcpListener.AcceptTCP()

      fmt.Printf("The client:%s has connected!\n",tcpConn.RemoteAddr().String())

      handleError(err)

      defer tcpConn.Close()

go handleConn(tcpConn)    //起一個goroutine處理

    }

  }


Client

  package main


  import (

    "net"

    "fmt"

    "os"

    "bufio"

  )


  const BUFF_SIZE = 1024

  var input = make([]byte,BUFF_SIZE)


  func handleError(err error) {

    if err == nil {

      return

    }

    fmt.Printf("error:%s\n",err.Error())

  }


  func main() {

    if len(os.Args) != 2 {

      fmt.Println("Usage: ")

      return

    }

    port := os.Args[1]

    tcpAddr,err := net.ResolveTCPAddr("tcp4","localhost:"+port)

    handleError(err)

    tcpConn,err := net.DialTCP("tcp4",nil,tcpAddr)

    handleError(err)

    reader :=  bufio.NewReader(os.Stdin)

    var continued = true

    var inputStr string

    for continued {

      n,err := reader.Read(input)

      handleError(err)

      if n > 0 {

        k,_ := tcpConn.Write(input[:n])

        if k > 0 {

          inputStr = string(input[:k])

          fmt.Printf("Write:%s",inputStr)

if inputStr == "exit\n" {  //在比對時由於有個斷行符號符,所以加上\n

continued = false        //也可以將inputStr = TrimRight(inputStr,"\n")

          }

        }

      }

    }

  }


高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!

原價1188元的12節區塊鏈進階課程,現僅需1元!

還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!

限時限量!!先到先得!!

http://www.ydma.cn/open/course/24

關注兄弟連區塊鏈技術公眾號領取更多技術乾貨哦!!!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.