【GO】Go语言中的net包

前言

        在网络编程中,关于Go语言中常用的包非net包莫属,下面,由笔者来一一的讲解一下Go语言net包中的常用函数,以及一些关于网络编程的步骤吧。

net包概述

        net包主要用于网络编程,提供了创建网络连接、发送和接受数据、处理网络协议等功能。

主要类型和接口

Conn接口

Conn接口是net包的核心,代表了一个通用的网络连接

type Conn interface {
    Read(b []byte) (n int, err error)
    Write(b []byte) (n int, err error)
    Close() error
    LocalAddr() Addr
    RemoteAddr() Addr
    SetDeadline(t time.Time) error
    SetReadDeadline(t time.Time) error
    SetWriteDeadline(t time.Time) error
}

各参数意义: 

  • Read(b []byte) (n int, err error):从连接中读取数据到b中。
  • Write(b []byte) (n int, err error):将b中的数据写入连接。
  • Close() error:关闭连接。
  • LocalAddr() Addr:返回本地网络地址。
  • RemoteAddr() Addr:返回远程网络地址。
  • SetDeadline(t time.Time) error:设置连接的读写截止时间。
  • SetReadDeadline(t time.Time) error:设置读操作的截止时间。
  • SetWriteDeadline(t time.Time) error:设置写操作的截止时间。

Lintener接口

Listener接口用于监听和接受传入的连接

type Listener interface {
    Accept() (Conn, error)
    Close() error
    Addr() Addr
}

 各参数意义: 

  • Accept() (Conn, error):等待并返回下一个连接。
  • Close() error:关闭监听器。
  • Addr() Addr:返回监听的网络地址

Addr接口

Adrr表示一个网络地址

type Addr interface {
    Network() string // 返回网络类型(例如 "tcp", "udp")
    String() string  // 返回地址字符串(例如 "127.0.0.1:8080")
}

网络编程的基本步骤【插入补充】

1.创建套接字

        使用编程语言提供的API(如GO语言中的net包)创建一个套接字。【套接字(socket)是一个抽象概念,表示网络通信的端点。套接字通常用于描述网络连接的两端,即客户端和服务器之间的通信通道。】

2.绑定地址和端口

        将套接字绑定到一个特定的IP地址和端口上

3.监听连接(对于服务器)

        服务器程序需要监听来自客户端的连接请求

4.接受连接(对于服务器)

        服务器接受客户端的连接请求,并创建一个新的套接字来处理该连接

5.发送和接收数据

        通过套接字发送和接收数据

6.关闭连接

        通信结束后,关闭套接字以释放资源

举例:

TCP服务器

// 创建一个TCP监听器,监听本地8080端
listener,err := net.Listen("tcp","localhost:8080")
if err != nil {
	fmt.Println("监听失败,",err)
	return
}

defer listener.Close()

for {
		conn,err :=listener.Accept()
		if err != nil{
			fmt.Println("error",err)
			return 
		}

        //处理连接
        //一般使用并发,这样就不会轻易造成堵塞
		buffer := make([]byte,1024)
        //第一个参数返回的是成功读取的字节数
	    _,err := conn.Read(buffer)

	    if err != nil{
		fmt.Println("Error",err)
	    }
	    fmt.Println("message :",string(buffer))

	    conn.Write([]byte("Message received."))
	    conn.Close()

	}

TCP客户端

//创建一个TCP连接,连接到本地8080端口
conn,err :=net.Dial("tcp","localhost:8080")
if err != nil{
	fmt.Println("conn error",err)
	return
}

defer conn.Close()

message :="hello go net"
conn.Write([]byte(message))

buffer :=make([]byte,1024)
//第一个参数为成功读取的字节数
_,err =conn.Read(buffer)
if err != nil{
	fmt.Println("Read error",err.Error())
	return
}
// 打印服务器响应
fmt.Println("Server response:", string(buffer))	

总结

        Go语言中的net包没有直接使用socket套接字,因为Go语言的net包抽象了底层的套接字操作,使得开发者可以更方便地进行网络编程。通过Conn接口、Listen和Dial函数来实现我们常常所需要的操作。

        笔者接触的仅仅只有tcp类,关于其他的还暂未接触,故举例方面十分浅显,仅贴代码来方便理解。后续接触更多关于并发的项目再做补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值