golang net包学习笔记
2021-07-15 08:06
标签:csharp 返回 error ack dead 结构体 ext interface 根据 阅读源代码发现在net包中主要实现了ip、tcp、udp、unix等通信方式。它们大致可以分成两大类;其一,ip、udp、unix(DGRAM),这是一些无链接的协议,其二,tcp、unix(STREAM),需要建立链接。net对这两类协议的使用有一些区别,最明显的是对于tcp、unix(STEAM)这些协议需要使用一个Listener接口来进行服务端的监听, 其中每一种通信方式都使用 xxConn 结构体来表示,诸如IPConn、TCPConn等,这些结构体都实现了Conn接口,Conn接口实现了基本的读、写、关闭、获取远程和本地地址、设置timeout等功能。 1、ip 使用IPConn结构体来表示,它实现了Conn、PacketConn两种接口。使用如下两个函数进行Dial和Listen。 2、tcp 使用TCPConn结构体来表示,它实现了Conn接口。 使用DialTCP进行Dial操作: 使用 ListenTCP函数进行Listen,产生一个TCPListener结构体 使用TCPListener的AcceptTCP方法建立通信链路,得到TCPConn。 3、udp 使用UDPConn接口体来表示,它实现了Conn、PacketConn两种接口。使用如下两个函数进行Dial和Listen。 4、unix UnixConn实现了Conn、PacketConn两种接口,其中unix又分为SOCK_DGRAM、SOCK_STREAM。 4.1 对于unix(SOCK_DGRAM),使用如下两个函数进行Dial和Listen。 4.2 对于unix(SOCK_STREAM) 客户端使用DialUnix进行Dial操作 服务端使用ListenUnix函数进行Listen操作,然后使用UnixListener进行AcceptUnix 5 为了使用方便,golang将一些重复的操作集中到一个函数中。 可以发现上述几种通信,都得有Dialxxx、Listenxxx操作,但是根据有无链接,有分成了两大类,其中一种Listenxxx后直接返回对应的xxxConn,另一种Listenxxx后得到xxxListener,还需要借助Accepxxx进行获取xxxConn。所以为了偷懒,又有如下函数: 这个函数用于侦听ip、udp、unix(DGRAM)等协议,返回一个PacketConn接口,同样根据侦听的协议不同,这个接口可以包含IPCon、UDPConn、UnixConn等,它们都实现了PacketConn。可以发现与ip、unix(stream)协议不同,直接返回的是xxConn,不是间接的通过Listener进行Accept操作后,才得到一个Conn。 这个函数用于侦听tcp、unix(stream)等协议,返回一个Listener接口、根据侦听的协议不同,这个接口可以包含TCPListener、UnixListener等,它们都实现了Listener接口,然后通过调用其Accept方法可以得到Conn接口,进行通信。 这个函数对于所有的协议都是相同的操作,返回一个Conn接口,根据协议的不同实际上包含IPConn、UDPConn、UnixConn、IPConn,它们都实现了Conn接口 golang net包学习笔记 标签:csharp 返回 error ack dead 结构体 ext interface 根据 原文地址:http://www.cnblogs.com/Dream-Chaser/p/7073434.html 1 type Conn interface {
2
3 Read(b []byte) (n int, err error)
4
5 Write(b []byte) (n int, err error)
6
7 Close() error
8
9 LocalAddr() Addr
10
11 RemoteAddr() Addr
12
13 SetDeadline(t time.Time) error
14
15 SetReadDeadline(t time.Time) error
16
17 SetWriteDeadline(t time.Time) error
18 }
func DialIP(netProto string, laddr, raddr *IPAddr) (*IPConn, error)
func ListenIP(netProto string, laddr *IPAddr) (*IPConn, error)
func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error)
func ListenTCP(net string, laddr *TCPAddr) (*TCPListener, error)
func DialUDP(net string, laddr, raddr *UDPAddr) (*UDPConn, error)
func ListenUDP(net string, laddr *UDPAddr) (*UDPConn, error)
func DialUnix(net string, laddr, raddr *UnixAddr) (*UnixConn, error)
func ListenUnixgram(net string, laddr *UnixAddr) (*UnixConn, error)
func DialUnix(net string, laddr, raddr *UnixAddr) (*UnixConn, error)
func ListenUnix(net string, laddr *UnixAddr) (*UnixListener, error)
func ListenPacket(net, laddr string) (PacketConn, error)
func Listen(net, laddr string) (Listener, error)
func Dial(network, address string) (Conn, error)