ホームページ  >  記事  >  バックエンド開発  >  golangでポートを削除する方法

golangでポートを削除する方法

PHPz
PHPzオリジナル
2023-03-31 10:24:32730ブラウズ

近年、golang 言語は多くの開発者の間で広く注目を集めています。その理由は、golang には優れたパフォーマンス、高効率、高度なメモリ管理など、多くの利点があるためです。ただし、開発に golang を使用すると、いくつかの問題も発生します。その 1 つは、ポートを削除する方法です。この記事では、golangを使用してポートを削除する方法を紹介します。

まず、ポートとは何かを知る必要があります。簡単に言うと、ポートは、ピア (コンピュータと Web サイトのサーバーなど) 間の接続を識別するために使用されるトランスポート層プロトコル (TCP や UDP など) です。 golang では、net パッケージを通じてポートを使用できます。以下は簡単な使用例です:

package main

import (
    "fmt"
    "net"
)

func main() {
    addr, err := net.ResolveTCPAddr("tcp", "localhost:8080")
    if err != nil {
        fmt.Println(err)
    }

    ln, err := net.ListenTCP("tcp", addr)
    if err != nil {
        fmt.Println(err)
    }

    for {
        conn, err := ln.Accept()
        if err != nil {
            fmt.Println(err)
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

このコードは、golang の net パッケージを使用して TCP ポートをリッスンし、確立された接続を処理する方法を示しています。ただし、ここではポートの使用方法ではなく、ポートを削除する方法に焦点を当てます。

次に、golangを使ってポートを削除する方法を紹介します。 localhost でポートレス TCP 接続をリッスンしたいとします。次のコードを使用できます。

package main

import (
    "fmt"
    "net"
)

func main() {
    l, err := net.Listen("tcp", ":")
    if err != nil {
        fmt.Println(err)
        return
    }

    for {
        conn, err := l.Accept()
        if err != nil {
            fmt.Println(err)
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

このコードは、TCP ポートのアドレス パラメーターを に設定します。 ポートを削除するには。これは多くの状況で機能します。ただし、特別な場合には、これをよりきめ細かく制御する必要がある場合があります。

リスニング IP アドレスとポートをより適切に制御するために、net.InterfaceAddrs() 関数を使用してバインドできます。以下にコード例を示します。

package main

import (
    "fmt"
    "net"
)

func main() {
    iface, err := net.InterfaceByName("en0")
    if err != nil {
        fmt.Println(err)
        return
    }

    addrs, err := iface.Addrs()
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, addr := range addrs {
        ipaddr := addr.(*net.IPNet).IP
        if ipaddr.To4() != nil {
            laddr := &net.TCPAddr{IP: ipaddr, Port: 0}

            l, err := net.ListenTCP("tcp", laddr)
            if err != nil {
                fmt.Println(err)
                continue
            }

            fmt.Println(l.Addr().String())

            for {
                conn, err := l.Accept()
                if err != nil {
                    fmt.Println(err)
                    continue
                }

                go handleConnection(conn)
            }
        }
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

このコードは、インターフェイスの IP アドレスのリストを取得し、各アドレスを反復処理して、そのアドレスにポートレス リスナーをバインドしようとします。同時に、バインドが成功するたびに、バインドされたアドレスとポート情報が出力されます。もちろん、出力結果からポート部分をフィルタリングしてポートを削除することもできます。

要約すると、golang を使用してポートを削除する方法は非常に簡単で、net パッケージで提供されるいくつかの実用的な機能を理解するだけで済みます。次に、この記事が役に立ち、golang 開発でポートをより正確に制御できるようになることを願っています。

以上がgolangでポートを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。