在Go中, 网络编程主要通过 net 包实现。支持 包括TCP/IP、UDP、域名解析和Unix域socket等连接,此外,还通过 net/http ,net/rpc 等提供了 HTTP,RPC等主流应用层的连接协议。

TCP服务

client端代码:

package main

import (
"bufio"
"fmt"
"net"
"os"
"strings"
)

func main() {
//192.168.1.13这里可以替换为www.***.com域名。
conn, err := net.Dial("tcp", "192.168.1.13:8888")
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
inputReader := bufio.NewReader(os.Stdin)
for {
//读取输入
readString, _ := inputReader.ReadString('\n')
trim := strings.Trim(readString, "\r\n")
_, err := conn.Write([]byte(trim))
if err != nil {
fmt.Println(err)
return
}
buf := [512]byte{}
n, err := conn.Read(buf[:])
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(buf[:n]))
}

}

server端代码:

package main  
import (
"bufio"
"fmt"
"net"
)
func main() {
listen,err:= net.Listen("tcp",":8888")
if err != nil{
fmt.Println(err)
return
}
for {
conn,err := listen.Accept()
if err != nil{
fmt.Println(err)
return
//continue
}
defer conn.Close()
for {
//处理
reader := bufio.NewReader(conn)
var buf [1024]byte
read,err:= reader.Read(buf[:])
if err != nil{
fmt.Println(err)
return
}
recv := string(buf[:read])
fmt.Println("GET MESSAGE: ",recv)
conn.Write([]byte(recv))
}
}
}

客户端:

golang的net包net.Dial和net.Listen_TCP

服务端:

golang的net包net.Dial和net.Listen_Go_02