Bootstrap

Go-Web之TCP网络连接

函数学习

  1. net.Listen:用于创建一个TCP监听器,在指定地址上监听传入的连接
  2. listrener.Accept:这个方法会阻塞,直到有新的客户端连接,当连接到来时,它会返回一个net.Conn类型的连接对象,表示客户端和服务器之间的TCP连接
  3. net.Dial:用于客户端连接到TCP服务器,指定服务器的地址,比如127.0.0.1:8080,其返回一个net.Conn类型的对象,表示客户端与服务器之间的连接
  4. conn.Write:用于向客户端或服务器发送数据。
  5. conn.Read:用于从连接中读取来自客户端的消息,客户端读取来自服务器的响应

如何构建TCP服务器

在Go语言中构建TCP服务器主要通过net库

总共是三个步骤:

  1. 使用net.Listen创建一个TCP监听器,它会指定的端口上监听传入的连接
  2. 通过listener.Accept()传入的连接
  3. 通过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客户端

步骤主要是俩个:

  1. 使用net.Dial连接到指定的TCP服务器地址
  2. 通过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
;