一般的网络通信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
}