使用Golang完成的的TCP服务器端和客户端通讯代码

使用golang进行socket编程,是很简单的一件事情,本文,用最基本的代码演示了Golang的TCP服务端和客户端通讯的代码。

如果你把文章中的:

    listener, err := net.Listen("tcp", "127.0.0.1:8888")

    conn, err := net.Dial("tcp", "127.0.0.1:8888")

处的 tcp改成udp,你会发现使用UDP进行socket编程,并没有太大哦。

服务器端代码

main.go

package main

import (
    "fmt"
    "net"
)

func handleConnection(conn net.Conn) {
    // 处理连接
    defer conn.Close()

    // 读取数据
    buffer := make([]byte, 1024)
    n, err := conn.Read(buffer)
    if err != nil {
        fmt.Println("读取数据错误:", err)
        return
    }

    // 打印数据
    fmt.Println("收到数据:", string(buffer[:n]))

    // 发送数据
    _, err = conn.Write([]byte("Hello, World!"))
    if err != nil {
        fmt.Println("发送数据错误:", err)
        return
    }
}

func main() {
    // 监听端口
    listener, err := net.Listen("tcp", "127.0.0.1:8888")
    if err != nil {
        fmt.Println("监听端口错误:", err)
        return
    }
    defer listener.Close()

    // 等待连接
    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("接受连接错误:", err)
            continue
        }

        // 处理连接
        go handleConnection(conn)
    }
}

这个代码实现了一个简单的TCP网络服务,它监听端口8888,并且可以接受客户端连接。当有客户端连接上来之后,它会调用handleConnection函数来处理连接。handleConnection函数会读取客户端发送过来的数据,然后打印出来,并且发送一个”Hello, World!”的消息给客户端。

客户端代码

下面是一个相应的客户端代码:

package main

import (
    "fmt"
    "net"
)

func main() {
    // 连接服务器
    conn, err := net.Dial("tcp", "127.0.0.1:8888")
    if err != nil {
        fmt.Println("连接服务器错误:", err)
        return
    }
    defer conn.Close()

    // 发送数据
    _, err = conn.Write([]byte("Hello, Server!"))
    if err != nil {
        fmt.Println("发送数据错误:", err)
        return
    }

    // 读取数据
    buffer := make([]byte, 1024)
    n, err := conn.Read(buffer)
    if err != nil {
        fmt.Println("读取数据错误:", err)
        return
    }

    // 打印数据
    fmt.Println("收到数据:", string(buffer[:n]))
}

这个客户端代码会连接到TCP服务器,然后发送一个”Hello, Server!”的消息给服务器。它会等待服务器返回数据,并且打印出来。