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