辅助工具:
netcat : 下载链接
解压后配置相关路径
相关函数源码:
Listen:
func Listen(network, address string) (Listener, error) {
var lc ListenConfig
return lc.Listen(context.Background(), network, address)
}
Read:
Read(b []byte) (n int, err error) //接口方法
//方法实现
func (c *conn) Read(b []byte) (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
n, err := c.fd.Read(b)
if err != nil && err != io.EOF {
err = &OpError{Op: "read", Net: c.fd.net, Source: c.fd.laddr, Addr: c.fd.raddr, Err: err}
}
return n, err
}
Dial:
func Dial(network, address string) (Conn, error) {
var d Dialer
return d.Dial(network, address)
}
TCPServer
package main
import (
"fmt"
"net"
)
func main(){
//监听
listen, err := net.Listen("tcp","127.0.0.1:8888")
if err != nil{
fmt.Println("err : ",err)
return
}
defer listen.Close()
//堵塞等待用户
for {
conn, err := listen.Accept()
if err != nil{
fmt.Println("err : ",err)
return
}
buf := make([]byte, 1024)
a, err1 := conn.Read(buf)
if err1 != nil{
fmt.Println("err1 : ",err1)
//continue
return
}
fmt.Println("buf = ",string(buf[:a]))
defer conn.Close()
}
//接受用户的请求
}
TCPClient
package main
import (
"fmt"
"net"
)
func main(){
//自动链接服务起
conn, err := net.Dial("tcp", "127.0.0.1:8888")
if err != nil{
fmt.Println("err = ",err)
return
}
defer conn.Close()
//send data
conn.Write([]byte("are u ok"))
}