【GO】简单通信之TCP

简介: 【GO】简单通信之TCP

初始代码没有加注释,初始代码只能跑一次。往下拉就会有代码注释 慢慢看哈。本文提供的源码都可以直接执行

1 tcp初始服务端代码

package main
import (
  "fmt"
  "net"
  "os"
)
func TcpError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func ioWithConn(conn net.Conn) {
  buffer := make([]byte, 1024)
  n, err := conn.Read(buffer)
  TcpError(err, "conn.Read")
  clientMsg := string(buffer[:n])
  fmt.Println("收到客户端消息", clientMsg)
  conn.Write([]byte("msg receive" + clientMsg))
}
func main() {
  // 监听tcp连接
  listener, err := net.Listen("tcp", "127.0.0.1:8080")
  TcpError(err, "net.Listen")
  conn, err := listener.Accept()
  TcpError(err, "listener.Accept")
  ioWithConn(conn)
}

2 tcp初始客户端代码

package main
import (
  "bufio"
  "fmt"
  "net"
  "os"
)
func tcpError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  // 直接拨号连接
  conn, err := net.Dial("tcp", "127.0.0.1:8080")
  tcpError(err, "net.Dial")
  reader := bufio.NewReader(os.Stdin)
  lineBytes, _, _ := reader.ReadLine()
  conn.Write(lineBytes)
  buffer := make([]byte, 1024)
  n, _ := conn.Read(buffer)
  serverMsg := string(buffer[:n])
  fmt.Println("server", serverMsg)
}

屏幕快照 2022-05-19 上午11.34.16.png

package main
import (
  "fmt"
  "net"
  "os"
)
func TcpError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func ioWithConn(conn net.Conn) {
  // 开辟一个缓冲区
  buffer := make([]byte, 1024)
  // 关闭连接
  defer conn.Close()
  for {
    // 读取数据
    n, err := conn.Read(buffer)
    // 验证
    TcpError(err, "conn.Read")
    // 把读取的数据放到缓存区中
    clientMsg := string(buffer[:n])
    fmt.Println("收到客户端消息", clientMsg)
    // 如果客户端输入的是 im off
    if clientMsg == "im off" {
      // 服务端往连接写一个bye
      conn.Write([]byte("bye"))
      break
    }
    // 服务端回复客户端的信息
    conn.Write([]byte("msg receive" + clientMsg))
  }
  fmt.Println("用户断开连接")
}
func main() {
  // 监听tcp连接
  listener, err := net.Listen("tcp", "127.0.0.1:8080")
  // 验证错误
  TcpError(err, "net.Listen")
  // 服务端一连接就会出现listener...
  fmt.Println("listener...")
  for {
    // 新的客户端连接
    conn, err := listener.Accept()
    // 验证连接
    TcpError(err, "listener.Accept")
    // 处理每一个客户端
    go ioWithConn(conn)
  }
}

客户端

package main
import (
  "bufio"
  "fmt"
  "net"
  "os"
)
func tcpError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  // 直接拨号连接
  conn, err := net.Dial("tcp", "127.0.0.1:8080")
  tcpError(err, "net.Dial")
  // 读取键盘输入
  reader := bufio.NewReader(os.Stdin)
  // 创建缓冲区
  buffer := make([]byte, 1024)
  for {
    // 每次读取一行
    lineBytes, _, _ := reader.ReadLine()
    // 输入写入字符串
    conn.Write(lineBytes)
    // 读取缓冲区的数据(这块是服务端写的,这里就可以直接拿出来)
    n, _ := conn.Read(buffer)
    // 把字节转为字符串
    serverMsg := string(buffer[:n])
    fmt.Println("server", serverMsg)
    if serverMsg == "bye" {
      break
    }
  }
  fmt.Println("客户端以下线")
}
相关文章
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
362 0
|
安全 Go
Go新手步步为赢:并发编程通信指南
Go新手步步为赢:并发编程通信指南
166 0
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
250 0
|
网络协议 Java Go
【Go语言专栏】Go语言中的WebSocket实时通信应用
【4月更文挑战第30天】Go语言(Golang)是Google开发的编程语言,适用于云计算、微服务等领域。本文介绍了WebSocket,一种实现浏览器与服务器全双工通信的协议,其特点是实时性、全双工和轻量级。在Go中实现WebSocket,可以使用gorilla/websocket库。示例展示了如何创建服务器端和客户端,实现消息的收发。WebSocket广泛应用于聊天、游戏、通知推送和实时数据同步等场景。学习Go语言中的WebSocket对于开发实时通信应用至关重要。
713 0
|
网络协议 程序员 Go
GO语言使用之网络编程(TCP编程)
GO语言使用之网络编程(TCP编程)
347 0
|
网络协议 Go
GO语言学习 - 创建TCP监听
GO语言学习 - 创建TCP监听
408 61
|
网络协议 Go
Swoole与Go系列教程之TCP服务的应用
TCP(传输控制协议)的出现是为了解决计算机网络中的数据可靠传输和连接管理的问题。在早期的计算机网络中,特别是在分组交换和互联网的发展初期,网络是不可靠的,存在丢包、错误和延迟等问题。
1204 0
Swoole与Go系列教程之TCP服务的应用
|
网络协议 Go
【go笔记】TCP编程
【go笔记】TCP编程
158 0
|
网络协议 Linux Go
Go语言TCP Socket编程(下)
Go语言TCP Socket编程
314 1
|
Java Go API
玩转gRPC—Go使用gRPC通信实战
玩转gRPC—Go使用gRPC通信实战
297 1

热门文章

最新文章