Go-Web之TCP网络连接
函数学习
- net.Listen:用于创建一个TCP监听器,在指定地址上监听传入的连接
- listrener.Accept:这个方法会阻塞,直到有新的客户端连接,当连接到来时,它会返回一个net.Conn类型的连接对象,表示客户端和服务器之间的TCP连接
- net.Dial:用于客户端连接到TCP服务器,指定服务器的地址,比如127.0.0.1:8080,其返回一个net.Conn类型的对象,表示客户端与服务器之间的连接
- conn.Write:用于向客户端或服务器发送数据。
- conn.Read:用于从连接中读取来自客户端的消息,客户端读取来自服务器的响应
如何构建TCP服务器
在Go语言中构建TCP服务器主要通过net库
总共是三个步骤:
- 使用net.Listen创建一个TCP监听器,它会指定的端口上监听传入的连接
- 通过listener.Accept()传入的连接
- 通过conn与客户端通信
package main
import (
"fmt"
"net" "os")
func handleConnection(conn net.Conn) {
defer conn.Close()
conn.Write([]byte("Welcome to the TCP server!\n"))
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
fmt.Println("Error", err)
return
}
fmt.Println("Received from client", string(buf[:n]))
}
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
defer listener.Close()
fmt.Println("Server is listening on port 8080...")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err)
continue
}
go handleConnection(conn)
}
}
这段代码主要就是提供一个网络服务,在本机的8080端口创建一个tcp服务器,连接到就会向客户端发送消息
如何构建TCP客户端
步骤主要是俩个:
- 使用net.Dial连接到指定的TCP服务器地址
- 通过conn发送和接收数据
package main
import (
"fmt"
"net" "os")
func main() {
conn, err := net.Dial("tcp","127.0.0.1:8080")
if err!=nil {
fmt.Println("Error",err)
os.Exit(1)
}
defer conn.Close()
_,err=conn.Write([]byte("Hello from TCP client!"))
if err!=nil {
fmt.Println("Error",err)
return
}
buf :=make([]byte,1024)
n,err :=conn.Read(buf)
if err!=nil {
fmt.Println("Error",err)
return
}
fmt.Println(n)
}
这段代码主要是向127.0.0.1:8080发送了一个Hello的语句,并接收其返回的语句进行输出。
这个代码可以和上一个相连接。
在两个控制台分别启动代码即可
go run 1.go
go run 2.go