一般的網絡通信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
}