Go tcp通信

一般的网络通信socket编程过程按照建立socket使用socket()函数,绑定socket使用bind()函数,监听端口使用listen()函数或者连接使用connect()函数,接收使用receive()函数或者发送使用send()函数这样一个过程。Go语言对此过程进行了封装只需要调用net.Dial()即可。

Dial()函数原型:func Dail(net,addr string) (Conn,error)

TCP链接:conn, err :=net.Dail("tcp", "192.168.0.10:2100")

建立TCP链接来实现初步HTTP协议,通过向网络主机发送HTTP Head请求,读取网络主机返回的信息,代码如下

package main

import (

  “net"

  "os"

   "io"

   "byte"

   "fmt"

)

 func main() {

 if len(os.Args) !=2 {

      fmt.Fprintf(os.Stderr, "Usage: %s host:port",os.Args[0])

     os.Exit(1)

}

 service := os.Args[1]

 conn,err  :=net.Dail("tcp",service)

  checkError(err)

  result, err :=readFully(conn)

 checkError(err)

 fmt.Println(string(result))

 os.Exit(0)

}

 func checkError(err error) {

  if err != nil {

       fmt.Fprintf(os.Stderr, "Fatal error:%s",err.Error())

     os.Exit(1)

   }

}

  func readFully(conn net.Conn) ([ ]byte, error)  {

  defer conn.Close( )

  result := byte.NewBuffer(nil)

  var buf [512]byte

  for {

   n, err :=conn.Read(buf([0:])

   result.Write(buf[0:n])

  if err !=nil {

       if err == io.EOF {

           break

    }

     return nil,err

   }

}

 return result.Bytes(), nil

}

  

猜你喜欢

转载自blog.csdn.net/xinsuiqingfeng/article/details/81229542