Golang的socket一般使用方式

版权声明:所有的博客都是作为个人笔记的。。。。。。 https://blog.csdn.net/qq_35976351/article/details/82668101

参考:https://astaxie.gitbooks.io/build-web-application-with-golang/zh/08.1.html

客户端

操作步骤:
- 确定服务器的IP和端口号
- 建立TCP连接
- 向服务器发送请求
- 接收请求

服务端

操作步骤:
- 确定监听的端口号
- 启动TCP监听
- 接收客户端的请求
- 返回数据(可以在单独的协程中完成)

代码实例

客户端:

package main

import(
  "net"
  "os"
  "fmt"
  "io/ioutil"
)

func main(){
  if len(os.Args)!=2{
    fmt.Println(os.Stderr,"Usage:%s host:port ",os.Args[0])
    os.Exit(1)
  }
  service:=os.Args[1]
  tcpAddr,err:=net.ResolveTCPAddr("tcp4",service)  
  conn,err:=net.DialTCP("tcp",nil,tcpAddr)
  checkErr(err)
  _,err=conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
  checkErr(err)
  result,err:=ioutil.ReadAll(conn)
  checkErr(err)
  fmt.Println(string(result))
  os.Exit(0)
}

func checkErr(err error){
  if err!=nil{
    fmt.Fprintf(os.Stderr,"Fatal error: %s\n",err.Error())
    os.Exit(1)
  }
}

服务端:

package main

import(
  "fmt"
  "net"
  "os"
  "time"
)

func main(){
  service:=":7777"
  tcpAddr,err:=net.ResolveTCPAddr("tcp4",service)
  checkErr(err)
  listener,err:=net.ListenTCP("tcp",tcpAddr)
  checkErr(err)
  for{
    conn,err:=listener.Accept()
    if err!=nil{
      continue;
    }
    go handleClient(conn)
  }
}

func checkErr(err error){
  if err!=nil{
    fmt.Fprintf(os.Stderr,"Fatal error: %s",err.Error())
  }
}

func handleClient(conn net.Conn){
  defer conn.Close()
  daytime:=time.Now().String()
  conn.Write([]byte(daytime))
}

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/82668101
今日推荐