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()
}
标签:err,fmt,编程,网络,TCP,golang,Println,net,conn
From: https://www.cnblogs.com/xiufanivan/p/17624086.html