在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
目录
TCP/IP协议介绍1、互联网起源 A. 起源于美国五角大楼,它的前身是美国国防部高级研究计划局主持研制的ARPAnet。 2、TCP/IP协议 A. TCP (传输控制协议) - 应用程序之间通信。 3、TCP协议 A. 面向连接的协议 4、IP协议 A. 用于计算机之间进行通信,是TCP/UDP协议的底层 5、 TCP/IP协议图解
6、 TCP协议基础 A. 通过IP和端口进行计算机之间进行访问 7、Tcp服务端编程模型
GO快速实现TCP服务端1、服务端处理流程
package main import ( "fmt" "net" ) func main(){ listen, err := net.Listen("tcp", "0.0.0.0:20000") if err != nil { fmt.Println("listen failed, err:", err) } for { conn, err := listen.Accept() if err !=nil { fmt.Printf("accept failed, err:%v\n", err) continue } go process(conn) } } func process(conn net.Conn){ defer conn.Close() for { var buf [128]byte n, err := conn.Read(buf[:]) if err != nil { fmt.Printf("read form conn failed, err:%v", err) break; } str := string(buf[:n]) fmt.Printf("recv from client, data:%v\n", str) } }
GO快速实现TCP客户端1、客户端编程模式
package main import ( "bufio" "fmt" "net" "os" "strings" ) func main(){ conn, err := net.Dial("tcp", "0.0.0.0:20000") if err != nil { fmt.Printf("dial failed, err:%v\n", err) return } reader := bufio.NewReader(os.Stdin) for { data,err := reader.ReadString('\n') if err != nil { fmt.Printf("read from console failed, err:%v\n", err) } data = strings.TrimSpace(data) _, err =conn.Write([]byte(data)) if err != nil { fmt.Printf("write failed, err%v\n", err) } } }
2、发送HTTP请求 A. HTTP协议是基于TCP协议之上的文本协议。 package main import ( "fmt" "io" "net" ) func main(){ conn, err := net.Dial("tcp", "www.baidu.com:80") if err != nil { fmt.Printf("dial failed, err:%v\n", err) return } data := "GET / HTTP/1.1\r\n" data += "HOST: www.baidu.com\r\n" data += "connection:close\r\n" data += "\r\n\r\n" _, err = io.WriteString(conn, data) if err != nil { fmt.Printf("wirte string failed, err:%v\n", err) return } var buf [1024]byte for { n, err := conn.Read(buf[:]) if err != nil || n == 0 { break } fmt.Println(string(buf[:n])) } }
UDP协议介绍1、UDP协议 A. 用户数据库报协议 UDP编程实例1、服务端代码 package main import ( "fmt" "net" ) func main() { // 创建监听 socket, err := net.ListenUDP("udp4", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 8080, }) if err != nil { fmt.Println("监听失败!", err) return } defer socket.Close() for { // 读取数据 data := make([]byte, 4096) read, remoteAddr, err := socket.ReadFromUDP(data) if err != nil { fmt.Println("读取数据失败!", err) continue } fmt.Println(read, remoteAddr) fmt.Printf("%s\n\n", data) // 发送数据 senddata := []byte("hello client!") _, err = socket.WriteToUDP(senddata, remoteAddr) if err != nil { return fmt.Println("发送数据失败!", err) } } }
2、客户端代码 package main import ( "fmt" "net" ) func main(){ // 创建连接 socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{ IP: net.IPv4(127,0,0,1), Port: 8080, }) if err !=nil { fmt.Println("连接失败!", err) return } defer socket.Close() // 发送数据 senddata := []byte("hello server!") _, err = socket.Write(senddata) if err != nil{ fmt.Println("发送数据失败!", err) return } //接收数据 data := make([]byte, 4096) read, remoteAddr, err := socket.ReadFromUDP(data) if err != nil { fmt.Println("读取数据失败!", err) return } fmt.Println(read, remoteAddr) fmt.Printf("%s\n", data) }
|
请发表评论