一.Go网络编程概述
1. 基本概念
- TCP 和 UDP: Go语言支持TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的通信,而UDP提供无连接的快速数据传输。
- 并发: Go语言的并发模型是通过goroutines实现的。每个网络请求都可以在自己的goroutine中处理,实现高效的并发。
- Channels: 用于在goroutines之间安全地传递数据。
2. net包
-
核心组件:
net
包提供了网络I/O的基础设施,包括TCP/UDP协议,以及DNS解析。
二.创建TCP服务器
1.监听端口
goCopy codeln, err := net.Listen("tcp", ":8080")
if err != nil {
// 处理错误
}
2.接受连接并处理
goCopy codefor {
conn, err := ln.Accept()
if err != nil {
// 处理错误
continue
}
go handleConnection(conn)
}
3.处理连接
goCopy codefunc handleConnection(conn net.Conn) {
// 使用conn读取和写入数据
conn.Close()
}
三.创建TCP客户端
1.建立连接
goCopy codeconn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
// 处理错误
}
2.发送和接收数据
goCopy code// 发送数据
conn.Write([]byte("hello\n"))
// 接收数据
bufio.NewReader(conn).ReadString('\n')
3.关闭连接
goCopy code
conn.Close()
4.使用UDP
-
建立UDP连接文章来源:https://www.toymoban.com/news/detail-822183.html
goCopy code conn, err := net.Dial("udp", "localhost:8081")
-
发送和接收数据文章来源地址https://www.toymoban.com/news/detail-822183.html
goCopy codeconn.Write([]byte("hello")) buf := make([]byte, 1024) n, _, err := conn.ReadFromUDP(buf)
四.综合案例
1.服务端-server.go
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", "localhost:8888")
if err != nil {
fmt.Println("开启服务端错误:", err)
return
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("接收错误:", err)
continue // 改为continue,可以处理下一个连接
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
// 读取客户端数据
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("读取错误:", err)
return
}
fmt.Println("Message Received:", message)
// 回发数据
response := "收到你的消息了:" + message
conn.Write([]byte(response))
}
2.客户端-client.go
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8888")
if err != nil {
fmt.Println("连接错误:", err)
return
}
defer conn.Close()
// 发送数据
message := "玩游戏\n"
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("发送数据错误:", err)
return
}
fmt.Println("发送数据:", message)
// 读取响应
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("读取响应错误:", err)
return
}
fmt.Println("收到响应:", response)
}
到了这里,关于Go语言网络编程介绍以及案例运用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!