当前位置: 首页 > article >正文

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

http://www.kler.cn/a/420290.html

相关文章:

  • AI常见同义词-关键概念
  • 【包教包会】CocosCreator3.x——重写Sprite,圆角、3D翻转、纹理循环、可合批调色板、不影响子节点的位移旋转缩放透明度
  • 华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称
  • JavaWeb12
  • 深入浅出:开发者如何快速上手Web3生态系统
  • 无分类编址的IPv4地址
  • HTTPS 的安全秘密:对称加密与非对称加密的完美结合
  • Python学习38天
  • 【赵渝强老师】PostgreSQL的物理存储结构
  • 【jvm】C1编译器和C2编译器的区别
  • 解决maya渲染慢、渲染卡顿等问题
  • Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌入式/国产OS等
  • 详解Qt pdf 之QPdfSelection 选择文本类
  • debian 11 虚拟机环境搭建过坑记录
  • 机器学习7-AdaBoost算法
  • Springboot聚合工程实现不同module使用不同的数据库配置操作数据库,实现自由切库
  • CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)
  • 《Serverless 架构:引领未来软件开发的新趋势》
  • 【Vue3】弹窗添加鼠标hover上边缘左、下的的拉伸宽度高度操作
  • atcoder abc 382 lazy_tag线段树
  • 关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明
  • 学习ASP.NET Core的身份认证(基于Session的身份认证2)
  • 域名解析系统 DNS
  • vue和react的diff算法区别?
  • Git 使用总结
  • 【前端面试】数据结构与set和map