golang的net包net.Dial和net.Listen
原创
©著作权归作者所有:来自51CTO博客作者dylan20141226的原创作品,请联系作者获取转载授权,否则将追究法律责任
在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))
}
}
}
客户端:
服务端: