golang tcp socket編程和http差很少的感受,也是請求應答的方式,TCP請求須要(ip地址,協議,端口)這三項,跟http請求差很少,咱們如今來模擬一個請求和應答來,請求的一方咱們就叫作client.go golang
package main import ( "fmt" "io/ioutil" "net" "os" ) func main() { tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:7777") //獲取一個TCP地址信息,TCPAddr checkError(err) conn, err := net.DialTCP("tcp", nil, tcpAddr) //建立一個TCP鏈接:TCPConn checkError(err) _, err = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n")) //發送HTTP請求頭 checkError(err) result, err := ioutil.ReadAll(conn) //得到返回數據 checkError(err) fmt.Println(string(result)) os.Exit(1) } func checkError(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } }
import ( "fmt" "net" "os" "time" ) func main() { tcpAddr, err := net.ResolveTCPAddr("tcp4", ":7777") //獲取一個tcpAddr checkError(err) listener, err := net.ListenTCP("tcp", tcpAddr) //監聽一個端口 checkError(err) for { conn, err := listener.Accept() if err != nil { continue } daytime := time.Now().String() conn.Write([]byte(daytime)) conn.Close() } } func checkError(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } }