golang中net的tcp服务使用

作者:zhijie 时间:2023-08-30 10:54:14 

服务端监听端口 listen()

方法:net.listen({监听类型},{监听的ip和端口})(conn, err){}

返回值:conn是监听的对象,有获取消息关闭监听等方法err错误信息,如果没有错误信息值为nil

import ("net"
"fmt"
)
conn,err := net.Lisien("tcp","127.0.0.1:8082")
if err != nil{
 fmt.Println("链接失败,错误信息为:"+err)
}

接受客户端的链接conn.Accept()

方法:conn.Accept() (newConn,err){} 返回值: newConn客户端的链接对象,类型为net.Conn.存放了客户端的链接信息,和与客户端交互的方法.err存放错误,如果没有错误信息值为nil 注意点: Accept()方法会阻塞,直到有链接过来

//  ...上面的代码...
// 因为客户端的链接不止一个,需要一直监听,所以加个死循环
for{
   newConn,err := conn.Accept()
   if err != nil{
       fmt.Println(err)
   }
   go handler(newConn)
}

// 客户端连接后处理逻辑
func handler(newConn net.Conn){
   // TODO
}

接收客户端发过来的数据newConn.Read()

方法:newConn.Read(msg)(num,err){}

返回值: num数据内容的长度,单位字节err错误信息,如果没有错误信息值为nil

注意点: 参数msg是一个byte类型的切片,用来保存客户端发送的数据。Read方法同样会阻塞!!

// ...上上边代码补充...
// 客户端连接后处理逻辑
func handler(newConn net.Conn){
   for{
       // 新建一个位置用于存放客户端数据
       msg := make([]byte,1024)
       num,err := newConn.Read(msg)
       if err != nil{
           // 打印错误信息
       }
       fmt.Println("客户端消息:"+msg)
   }
   
}

获取客户端的IP地址newConn.RemoteAddr().String()

// 获取ip地址,转为之字符串
newConn.RemoteAddr().String()

向客户端发送数据newConn.Write()

方法:newConn.Write(msg){}

参数:msg类型为[]byte

注意点:需要把待发送的字符串转为byte切片类型

newConn.Write([]bye("你好世界,helloworld1"))

关闭客户端连接newConn.Close()

方法: newConn.Close(){}

在客户端连接的返回的对象上调用Close()方法即可

newConn.Close()

客户端连接tpc服务端

连接服务端net.Dial()

方法: net.Dial({连接类型},{地址})(conn,err){}

放回值: conn连接成功后的连接对象,err连接出错时的错误信息,如果没有错误信息,返回nil

// 建立tcp连接
package main
import (
   "net"
   "fmt"
)
Ip,Port := "127.0.0.1",8081
conn,err := net.Dial("tcp",fmt.Sprintf("%s:%d",Ip,Port))
if err != nil{
   fmt.Println("net.Dial 错误:",err)
   return nil
}
if(conn == nil){
   fmt.Println(">>>>>>>>连接错误")
   return
}
fmt.Println(">>>>>>>>连接成功")

运行: 

golang中net的tcp服务使用

来源:https://juejin.cn/post/7069580997234442247

标签:golang,net,tcp,服务,使用
0
投稿

猜你喜欢

  • Python help()函数用法详解

    2022-09-15 13:15:34
  • php+ajax+h5实现图片上传功能

    2024-05-22 10:05:39
  • 深入理解Javascript中的观察者模式

    2024-05-13 09:36:23
  • Sublime开发python程序的示例代码

    2023-11-06 09:45:46
  • pytorch fine-tune 预训练的模型操作

    2023-05-02 01:05:25
  • Python使用pyserial进行串口通信的实例

    2022-03-07 15:30:09
  • 关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    2024-01-24 07:49:27
  • Vue项目服务器部署刷新页面404问题及解决

    2024-04-09 10:47:22
  • asp上传文件自动重命名方法

    2007-08-24 09:46:00
  • php获取客户端IP及URL的方法示例

    2024-05-03 15:49:01
  • Vue.js鼠标悬浮更换图片功能

    2024-04-30 10:42:35
  • python主线程与子线程的结束顺序实例解析

    2023-10-09 12:46:07
  • 搞定web设计中网页路径问题

    2007-09-22 08:52:00
  • pygame游戏之旅 添加游戏界面按键图形

    2023-06-30 21:48:38
  • 从绘画语言的发展,看视觉设计风格

    2008-08-03 17:11:00
  • VS2019+python3.7+opencv4.1+tensorflow1.13配置详解

    2023-06-19 04:56:38
  • Go语言中日期包(time包)的具体使用

    2024-05-08 10:52:33
  • 解析JavaScript中的标签语句

    2024-05-13 10:35:07
  • tensorflow模型继续训练 fineturn实例

    2023-07-10 12:53:09
  • 浅析SQL Server授予了CREATE TABLE权限但是无法创建表

    2024-01-28 18:26:23
  • asp之家 网络编程 m.aspxhome.com