【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("客户端以下线")
}
相关文章
|
8月前
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
104 0
|
8月前
|
安全 Go
Go新手步步为赢:并发编程通信指南
Go新手步步为赢:并发编程通信指南
63 0
|
8月前
|
网络协议 Java Go
【Go语言专栏】Go语言中的WebSocket实时通信应用
【4月更文挑战第30天】Go语言(Golang)是Google开发的编程语言,适用于云计算、微服务等领域。本文介绍了WebSocket,一种实现浏览器与服务器全双工通信的协议,其特点是实时性、全双工和轻量级。在Go中实现WebSocket,可以使用gorilla/websocket库。示例展示了如何创建服务器端和客户端,实现消息的收发。WebSocket广泛应用于聊天、游戏、通知推送和实时数据同步等场景。学习Go语言中的WebSocket对于开发实时通信应用至关重要。
275 0
|
6月前
|
网络协议 Go
Swoole与Go系列教程之TCP服务的应用
TCP(传输控制协议)的出现是为了解决计算机网络中的数据可靠传输和连接管理的问题。在早期的计算机网络中,特别是在分组交换和互联网的发展初期,网络是不可靠的,存在丢包、错误和延迟等问题。
1014 0
Swoole与Go系列教程之TCP服务的应用
|
5月前
|
网络协议 Go
【go笔记】TCP编程
【go笔记】TCP编程
|
8月前
|
网络协议 Linux Go
Go语言TCP Socket编程(下)
Go语言TCP Socket编程
107 1
|
8月前
|
安全 Java Go
【Go语言专栏】Go语言中的加密与安全通信
【4月更文挑战第30天】本文介绍了Go语言中的加密与安全通信。通过使用golang.org/x/crypto/ssh/terminal库实现终端加密,以及golang.org/x/net/websocket库实现WebSocket安全通信。文章展示了安装库的命令、加密操作及WebSocket通信的示例代码。此外,还列举了安全通信在数据传输加密、用户认证、密码保护和文件加密等场景的应用。掌握这些知识对开发安全的Web应用至关重要。
112 0
|
8月前
|
缓存 监控 前端开发
【Go 语言专栏】Go 语言中的 WebSocket 实时通信应用
【4月更文挑战第30天】本文探讨了Go语言在WebSocket实时通信中的应用。WebSocket作为全双工通信协议,允许持续的双向通信。Go语言凭借其高效和并发特性,适合构建实时应用。文中概述了在Go中实现WebSocket的基本步骤,包括服务器和客户端的建立与通信,并列举了实时聊天、数据监控和在线协作等应用案例。同时,强调了消息格式、并发处理、错误处理和安全性的注意事项。通过数据压缩、缓存管理和连接管理等策略可优化性能。Go语言还能与数据库和前端框架结合,提升用户体验。总之,Go语言为WebSocket实时通信提供了强大支持,有望在更多领域发挥作用。
159 0
|
8月前
|
网络协议 Ubuntu Unix
Go语言TCP Socket编程(上)
Go语言TCP Socket编程
161 0
|
网络协议 程序员 Go
GO语言使用之网络编程(TCP编程)
GO语言使用之网络编程(TCP编程)
131 0