Golang的socket一般使用方式
阿新 • • 發佈:2018-12-09
客戶端
操作步驟: - 確定伺服器的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))
}