2021-06-13 来源:华纳网 责任编辑:王双双 人气:
核心提示:【谷雨课堂】Go实战 No.021 Go干货!打造一个TCP服务端
知识点:

Tcp服务器

本课内容:

大家好,欢迎来到谷雨课堂,



本节的干货,是用Go来实现一个实用的Tcp服务器。



TCP是互联网,尤其是物联网中非常重要的协议,

很多协议也是基于TCP协议之上开发来的,

比如:MQTT,HTTP等等

我们以后的干货中会讲到



所以,基础的TCP是必须掌握的知识,



本节,谷雨老师和同学们一起使用

最基础的Go函数库,无非引用任何第三方库

来打造一个最基本的TCP服务器



虽然代码简单,但其运行效率也是不低的。



在Go标准库net中,

我们可以根据给定的端口轻易的创建一个TcpServer,

在成功侦听某个端口后,

我们用可以用某个连接进行操作了,

进行双向的数据收发了。



到此,大部分的应用已经足够用了。



其它深入的功能在大多数的应用其实无需关心。




package YsIotEtc

import (
  "fmt"
  "log"
  "net"
)

func InitTcpShouHuanServer() {

  log.Println("Starting  TCP Server :5558...")
  // 创建 listener
  listener, err := net.Listen("tcp4", ":5558")
  if err != nil {
    fmt.Println("Error listening", err.Error())
    return //终止程序
  }

  // 监听并接受来自客户端的连接
  for {
    conn, err := listener.Accept()
    if err != nil {
      fmt.Println("Client Disconnect ", err.Error())
      return // 终止程序
    }
    go doServerStuff(conn)
  }

}

func doServerStuff(conn net.Conn) {
  for {
    buf := make([]byte, 512)
    l, err := conn.Read(buf)
    remote_ip := conn.RemoteAddr().String()
    if err != nil {
      fmt.Println("Client Disconnect ", err.Error())
      return //终止程序
    }
    strin := string(buf[:l])
    fmt.Printf("接收到数据 %s %d data: %v\n", remote_ip, l, strin)
    strRet := "Hello" + strin + "\r\n"
    n, err := conn.Write([]byte(strRet))
    if err != nil {
      fmt.Println("conn.Write err=", err)
    }
    fmt.Printf("Send %d bytes\n", n)

  }
}




扩展阅读

TCP(Transmission Control Protocol 传输控制协议)是一种

面向连接(连接导向)的、可靠的、 基于IP的传输层协议。


TCP在IP报文的协议号是6。

TCP是一个超级麻烦的协议,

而它又是互联网的基础,

也是每个程序员必备的基本功。

TCP是面向连接的,

无论哪一方向另一方发送数据之前,

都必须先在双方之间建立一条连接。

在TCP/IP协议中,

TCP 协议提供可靠的连接服务,

连接是通过三次握手进行初始化的。



完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/



                                                                                                                                                                                                




免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。