【GO】TCP交替通信

简介: 【GO】TCP交替通信

服务端源码

package main
import (
  "fmt"
  "net"
  "os"
)
/**
处理异常
*/
func JtHandleError(err error, when string) {
  if err != nil {
    fmt.Println(when, "错误原因:", err)
    os.Exit(1)
  }
}
func main() {
  listener, err := net.Listen("tcp", "127.0.0.1:8888")
  JtHandleError(err, "net.Listen")
  fmt.Println("listener...")
  defer listener.Close()
  for {
    // 接入一个客户端
    conn, err := listener.Accept()
    JtHandleError(err, "listener.Accept")
    // 给每一个客户端开启一个线程
    go JtIoWithConn(conn)
  }
}
func JtIoWithConn(conn net.Conn) {
  defer conn.Close()
  // 创建缓存区
  buffer := make([]byte, 1024)
  // 这个获取的是客户端的地址
  clientAddr := conn.RemoteAddr()
  for {
    // 读入消息
    n, err := conn.Read(buffer)
    JtHandleError(err, "conn.Read")
    // 客户端消息
    clientMsg := string(buffer[:n])
    // 打印出客户端发过来的消息
    fmt.Println(clientAddr, clientMsg)
    // 服务端给客户端写的消息
    conn.Write([]byte("服务端以阅:" + clientMsg))
    if clientMsg == "over" {
      fmt.Printf("%v以下线\n", clientAddr)
      break
    }
  }
}

客户端源码

package main
import (
  "fmt"
  "net"
  "os"
)
/**
处理异常
*/
func JcHandleError(err error, when string) {
  if err != nil {
    fmt.Println(when, "错误原因:", err)
    os.Exit(1)
  }
}
func main() {
  // 拨号连接,得到专线conn
  conn, err := net.Dial("tcp", "127.0.0.1:8888")
  JcHandleError(err, "net.Dial")
  defer conn.Close()
  // 在专线中处理io
  ioInteractive(conn)
}
func ioInteractive(conn net.Conn) {
  defer conn.Close()
  // 在一条独立的协程里接收服务端的消息
  go func() {
    // 创建一个缓冲区
    buffer := make([]byte, 1024)
    // 循环读取
    for {
      // 从缓冲区读取消息
      n, err := conn.Read(buffer)
      JcHandleError(err, "conn.Read")
      serverMsg := string(buffer[:n])
      fmt.Println("服务端消息:", serverMsg)
    }
  }()
  // 在主协程里向服务端写消息
  var userInput string
  for {
    // 标准输入与输出
    fmt.Scan(&userInput)
    // 向服务端写出
    conn.Write([]byte(userInput))
    if userInput == "exit" {
      return
    }
  }
}



执行

服务端跑一个,客户端跑俩个即可

image.png

相关文章
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
194 0
|
安全 Go
Go新手步步为赢:并发编程通信指南
Go新手步步为赢:并发编程通信指南
103 0
|
6月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
108 0
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
131 1
|
网络协议 Java Go
【Go语言专栏】Go语言中的WebSocket实时通信应用
【4月更文挑战第30天】Go语言(Golang)是Google开发的编程语言,适用于云计算、微服务等领域。本文介绍了WebSocket,一种实现浏览器与服务器全双工通信的协议,其特点是实时性、全双工和轻量级。在Go中实现WebSocket,可以使用gorilla/websocket库。示例展示了如何创建服务器端和客户端,实现消息的收发。WebSocket广泛应用于聊天、游戏、通知推送和实时数据同步等场景。学习Go语言中的WebSocket对于开发实时通信应用至关重要。
445 0
|
网络协议 Go
Swoole与Go系列教程之TCP服务的应用
TCP(传输控制协议)的出现是为了解决计算机网络中的数据可靠传输和连接管理的问题。在早期的计算机网络中,特别是在分组交换和互联网的发展初期,网络是不可靠的,存在丢包、错误和延迟等问题。
1129 0
Swoole与Go系列教程之TCP服务的应用
|
网络协议 Go
【go笔记】TCP编程
【go笔记】TCP编程
|
网络协议 Linux Go
Go语言TCP Socket编程(下)
Go语言TCP Socket编程
192 1
|
安全 Java Go
【Go语言专栏】Go语言中的加密与安全通信
【4月更文挑战第30天】本文介绍了Go语言中的加密与安全通信。通过使用golang.org/x/crypto/ssh/terminal库实现终端加密,以及golang.org/x/net/websocket库实现WebSocket安全通信。文章展示了安装库的命令、加密操作及WebSocket通信的示例代码。此外,还列举了安全通信在数据传输加密、用户认证、密码保护和文件加密等场景的应用。掌握这些知识对开发安全的Web应用至关重要。
211 0

热门文章

最新文章