go tcp编程

Go语言实现TCP编程,通过net包创建TCP连接,实现数据的发送和接收。

Go语言简介

Go语言(又称Golang)是Google开发的一种静态类型、编译型语言,具有高性能、并发性和内存安全等特点,Go语言于2007年由罗伯特·格林(Robert Griesemer)、格什文(Rob Pike)和肯特·贝克(Ken Thompson)共同设计,2013年正式发布,Go语言的设计目标是实现简洁、高效的编程模型,以便开发大型软件系统。

TCP/IP协议简介

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是一种用于在网络中进行数据传输的通信协议,它是互联网最基本的协议,包括了一系列的子协议,如TCP、UDP、ICMP等,TCP/IP协议采用了分层的体系结构,分为应用层、传输层、网络层和链路层四个层次,每一层都有特定的功能,各层之间通过接口进行通信。

go tcp编程

Go语言实现TCP/IP编程

1、安装Go语言环境

要使用Go语言进行TCP/IP编程,首先需要安装Go语言环境,可以从官方网站下载并安装:https://golang.org/dl/

2、编写TCP服务器

go tcp编程

下面是一个简单的TCP服务器示例:

package main
import (
 "fmt"
 "net"
 "os"
)
func main() {
 listener, err := net.Listen("tcp", "localhost:8080")
 if err != nil {
  fmt.Println("Error listening:", err)
  os.Exit(1)
 }
 defer listener.Close()
 fmt.Println("Server is listening on localhost:8080...")
 for {
  conn, err := listener.Accept()
  if err != nil {
   fmt.Println("Error accepting:", err)
   os.Exit(1)
  }
  go handleConnection(conn)
 }
}
func handleConnection(conn net.Conn) {
 defer conn.Close()
 buf := make([]byte, 1024)
 for {
  n, err := conn.Read(buf)
  if err != nil {
   fmt.Println("Error reading:", err)
   break
  }
  _, err = conn.Write(buf[:n])
  if err != nil {
   fmt.Println("Error writing:", err)
   break
  }
 }
}

这个示例中,我们创建了一个TCP监听器,监听本地8080端口,当有客户端连接时,我们创建一个新的goroutine来处理这个连接,在handleConnection函数中,我们从客户端读取数据,然后将数据原样发送回客户端,当客户端断开连接时,我们关闭连接并退出goroutine。

3、实现一个简单的TCP客户端

go tcp编程

下面是一个简单的TCP客户端示例:

package main
import (
 "fmt"
 "net"
 "time"
)
func main() {
 conn, err := net.Dial("tcp", "localhost:8080")
 if err != nil {
  fmt.Println("Error dialing:", err)
  os.Exit(1)
 }
 defer conn.Close()
 for i := 0; i < 5; i++ {
  _, err := conn.Write([]byte("Hello from client"))
  if err != nil {
   fmt.Println("Error writing:", err)
   break
  }
  time.Sleep(1 * time.Second) // wait for server to reply before sending next message
 }
}

这个示例中,我们使用net.Dial函数连接到本地的TCP服务器,我们循环发送5条消息给服务器,每发送一条消息后,我们等待1秒钟再发送下一条消息,当收到服务器的响应时,我们打印出响应的内容,如果在发送过程中出现错误,我们打印错误信息并退出程序。

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/151963.html

(0)
酷盾叔订阅
上一篇 2024-01-17 02:52
下一篇 2024-01-17 02:55

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入