开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
今天来简单介绍下网编编程方面的知识,首先介绍TCP和UDP的区别
TCP
TCP的优点
- 数据传输稳定可靠
- 传输数据之前需要建立三次握手
- TCP在传输数据过程中,有确认、窗口、重传、拥塞控制机制
- TCP在传输数据完成后,会结束连接来减少资源的损耗
TCP的缺点
- 运行速度慢
- 效率低
- 占用系统资源多,易被攻击,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间
TCP协议: TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网际协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。
TCP服务端程序的处理流程: 1.监听端口 2. 接收客户端请求建立链接 3. 创建goroutine处理请求
func main() {
listen, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("listen failed, err:", err)
return
}
conn, err := listen.Accept() // 建立连接
if err != nil {
fmt.Println("accept failed, err:", err)
continue
}
go process(conn) // 启动一个goroutine处理连接
}
TCP客户端程序的处理流程: 1.建立与服务端的连接 2.进行数据收发 3.关闭链接
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("err :", err)
return
}
defer conn.Close() // 关闭连接
//数据发送
}
UDP
UDP的优点
- 运行速度快,UDP是一个无状态的传输协议,所以传输数据非常快,占用资源少
- 较安全,因为没有TCP的那些机制,UDP也会受到攻击,例如UDP Flood攻击等。
UDP的缺点
- 不可靠,不稳定
- 没有可靠的机制,遇到网络阻塞,就会容易丢包
UDP协议(User Datagram Protocol)用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。
UDP服务器端
func main() {
listen, err := net.ListenUDP("udp", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 8080,
})
if err != nil {
fmt.Println("listen failed, err:", err)
return
}
defer listen.Close()
}
UDP客户端
func main() {
socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 8080,
})
if err != nil {
fmt.Println("连接服务端失败,err:", err)
return
}
defer socket.Close()
}
总结
今天简单的学习了Go的网络编程,还有很多细节的部分,下一步需要继续深入,对于刚入门go语言的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!