golang的网络编程使用TCP和UDP协议

Golang网络编程支持TCP和UDP协议,实现高效、可靠的网络通信。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在网络编程中,TCP协议通常用于需要保证数据完整性、顺序性和可靠性的应用场景,Golang中的net包提供了对TCP协议的支持。

1、创建TCP连接

golang的网络编程使用TCP和UDP协议

要在Golang中创建一个TCP连接,首先需要导入net包,然后使用Dial函数。Dial函数接受两个参数:第一个参数是地址(Address),第二个参数是配置(Config)。

package main
import (
 "fmt"
 "net"
)
func main() {
 conn, err := net.Dial("tcp", "127.0.0.1:8080")
 if err != nil {
  fmt.Println("Error:", err)
  return
 }
 defer conn.Close()
}

2、读写数据

golang的网络编程使用TCP和UDP协议

创建TCP连接后,可以使用conn对象进行数据的读写操作,以下是一个简单的读取和写入数据的例子:

package main
import (
 "bufio"
 "fmt"
 "net"
 "os"
)
func main() {
 conn, err := net.Dial("tcp", "127.0.0.1:8080")
 if err != nil {
  fmt.Println("Error:", err)
  return
 }
 defer conn.Close()
 go func() {
  writer := bufio.NewWriter(conn)
  _, err := writer.WriteString("Hello, server!")
  if err != nil {
   fmt.Println("Error:", err)
   return
  }
  err = writer.Flush()
  if err != nil {
   fmt.Println("Error:", err)
   return
  }
 }()
 reader := bufio.NewReader(conn)
 line, err := reader.ReadString('
')
 if err != nil {
  fmt.Println("Error:", err)
  return
 }
 fmt.Println("Received from server:", line)
}

3、TCP监听与关闭监听端口(Server端)

golang的网络编程使用TCP和UDP协议

在Golang中,可以使用Listen函数创建一个TCP监听器,然后使用Accept函数等待客户端的连接,以下是一个简单的TCP服务器示例:

package main
import (
 "bufio"
 "fmt"
 "net"
 "os"
)
func main() {
 listener, err := net.Listen("tcp", "127.0.0.1:8080")
 if err != nil {
  fmt.Println("Error:", err)
  return
 }
 defer listener.Close()
 for {
  conn, err := listener.Accept() //阻塞等待新的连接请求到来,如果没有新的连接请求到来,那么程序将一直阻塞在这里,当有一个新的连接请求到来时,Accept方法返回一个Conn类型的指针和一个错误,这个错误可以忽略,如果没有错误发生,那么就表示成功接受到了一个新的连接请求,接下来我们就可以使用这个新的连接来发送和接收数据了,这里我们简单地向客户端发送一条消息“Hello from server”,之后就可以关闭这个连接了,但是为了能够同时处理多个客户端的请求,我们需要在一个循环里面不断地执行这样的操作,所以这里使用了for循环来不断地接受新的连接请求,在每次循环结束的时候都需要调用listener.Close()方法来关闭这个监听器,这样才能够释放掉系统资源,同时也需要在main函数的最后面加上listener.Close()来确保监听器能够被正确地关闭掉,否则的话,即使程序已经退出了main函数,监听器也还是会一直保持着开启状态,从而导致系统资源的浪费,另外需要注意的是,这里的监听地址是固定的“127.0.0.1:8080”,如果你想要让程序监听其他的IP地址或者端口号的话,你需要修改这部分代码。

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

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

相关推荐

发表回复

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

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