1. 程式人生 > >Golang的socket一般使用方式

Golang的socket一般使用方式

客戶端

操作步驟: - 確定伺服器的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)) }