网络编程
socket编程
Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面,对用户来说只需要调用Socket规定的相关函数,让Socket去组织符合指定的协议数据然后进行通信。
图解
### tcp协议
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。
服务端
/**
* Createby GoLand
* User xzw [email protected]
* Date 2021/8/8
* Time 上午10:27
*/
package main
import (
bufio
fmt
io
log
net
imooc.com/ccmouse/learngo/net/protocol
)
func main() {
listen, err := net.Listen(tcp, 127.0.0.1:8080) // 监听端口
if err != nil {
log.Fatal(listen failed, err:, err)
}
for {
conn, err := listen.Accept() // 建立连接
if err != nil {
log.Println(accept failed, err:, err)
continue
}
go process(conn) // 启动一个 goroutine 处理连接
}
}
func process(conn net.Conn) {
defer conn.Close()
for {
reader := bufio.NewReader(conn)
msg, err := protocol.Decode(reader)
if err == io.EOF {
return
}
if err != nil {
log.Println(decode msg failed, err:, err)
return
}
fmt.Println(收到client发来的数据:, msg)
data, err := protocol.Encode(msg)
if err != nil {
log.Println(encode msg failed, err:, err)
return
}
conn.Write(data)
}
}
客户端
粘包拆包
udp协议
用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报(package-oriented)的传输层协议。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验。
服务端
客户端
最后更新于