golang tcp socket

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)
	}
}



應答的一方咱們叫作server.go

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)
	}
}
相關文章
相關標籤/搜索