golang网络编程
1 简介
-
Go语言的网络编程主要使用
net
包来实现。该包提供了一组基本的网络功能,包括 TCP 和 UDP 套接字、IP 地址和端口号的处理、以及一些高级特性,如非阻塞 I/O 和 HTTP 客户端库。 -
本文简单介绍一下如何使用
net
包进行TCP
通信
2 TCP通信
TCP服务端
处理流程:
- 监听端口
- 接收客户端请求建立链接
- 创建goroutine处理链接。
示例1:
package main
import (
"fmt"
"net"
)
// TCP server端
func main() {
// 1.本地端口启动服务
listener, err := net.Listen("tcp", "127.0.0.1:30000")
if err != nil {
fmt.Println("listen failed, err:", err)
return
}
for {
// 2.建立连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("accept failed, err:", err)
continue
}
// 3.与client端通信
go processConn(conn)
}
listener.Close()
}
// 与client端通信
func processConn(conn net.Conn) {
tmp := make([]byte, 1024)
for {
n, err := conn.Read(tmp)
if err != nil {
fmt.Println("read from client failed, err:", err)
break
}
recvStr := string(tmp[:n])
fmt.Println(recvStr)
}
err := conn.Close()
if err != nil {
fmt.Println("close failed, err", err)
}
}
TCP客户端
处理流程:
- 建立与服务端的链接
- 进行数据收发
package main
import (
"bufio"
"fmt"
"net"
"os"
)
// TCP client端
func main() {
// 1.与server建立连接
conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("dial failed, err:", err)
}
// 2.发送数据
for {
/*
使用bufio包中的ReadString()函数来代替fmt.Scanln()函数。
这个函数可以读取一行字符串,包括空格、制表符和换行符等空白字符
*/
fmt.Print("请输入发送内容:")
reader := bufio.NewReader(os.Stdin)
msg, _ := reader.ReadString('\n')
if msg == "quit" {
break
}
conn.Write([]byte(msg))
}
conn.Close()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南