匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Golang网络编程:TCP/UDP编程实例

Golang网络编程:TCP/UDP编程实例

Golang是一个非常流行的编程语言,特别适合于网络编程方面的应用。在本篇文章中,我们将会涵盖TCP和UDP网络编程的实例。

TCP编程实例

TCP是一种面向连接的协议,它提供可靠的数据传输机制。下面是一个简单的TCP服务器和客户端程序。

服务器:

```go
package main
 
import (
    "fmt"
    "net"
)
 
func main() {
 
    ln, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    for {
        conn, err := ln.Accept()
        if err != nil {
            continue
        }
 
        go handleConnection(conn)
    }
}
 
func handleConnection(conn net.Conn) {
 
    buf := make([]byte, 1024)
 
    _, err := conn.Read(buf)
    if err != nil {
        fmt.Println("Error reading:", err.Error())
    }
 
    fmt.Println("Message received:", string(buf))
 
    conn.Close()
}
```

客户端:

```go
package main
 
import (
    "fmt"
    "net"
)
 
func main() {
 
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    fmt.Fprintf(conn, "Hello, server")
 
    conn.Close()
}
```

首先服务器程序使用net.Listen()函数监听一个TCP端口,等待客户端的连接。然后用ln.Accept()函数接受连接并在一个新的goroutine中处理连接,然后在服务器上打印收到的消息。

客户端程序使用net.Dial()函数连接到服务器。然后使用fmt.Fprintf()函数向服务器发送一条消息,在此之后关闭连接。


UDP编程实例

UDP是一种不可靠的协议,它提供了无连接的数据传输机制。下面是一个简单的UDP服务器和客户端程序。

服务器:

```go
package main
 
import (
    "fmt"
    "net"
)
 
func main() {
 
    pc, err := net.ListenPacket("udp", ":8080")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    defer pc.Close()
 
    buf := make([]byte, 1024)
 
    for {
        _, addr, err := pc.ReadFrom(buf)
        if err != nil {
            fmt.Println(err)
            continue
        }
 
        fmt.Println("Message received:", string(buf))
 
        _, err = pc.WriteTo(buf, addr)
        if err != nil {
            fmt.Println(err)
            continue
        }
 
    }
}
```

客户端:

```go
package main
 
import (
    "fmt"
    "net"
)
 
func main() {
 
    conn, err := net.Dial("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println(err)
        return
    }
 
    fmt.Fprintf(conn, "Hello, server")
 
    buf := make([]byte, 1024)
 
    _, err = conn.Read(buf)
    if err != nil {
        fmt.Println(err)
        return
    }
 
    fmt.Println("Message received:", string(buf))
 
    conn.Close()
}
```

首先UDP服务器程序使用net.ListenPacket()函数监听一个UDP端口,等待客户端的连接。然后使用pc.ReadFrom()函数从客户端接受消息,并在服务器上打印收到的消息。接着使用pc.WriteTo()函数给客户端发送一个消息。

客户端程序使用net.Dial()函数连接到服务器。然后使用fmt.Fprintf()函数向服务器发送一条消息。接着使用conn.Read()函数从服务器接收消息,并在客户端上打印收到的消息。

总结

本文中我们涵盖了TCP和UDP网络编程的实例,这些实例为初学者提供了一个简单而有用的入门介绍。Golang的网络编程是一件非常有趣和有用的事情,因为它可以帮助我们构建各种各样的网络应用。