Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuang port dalam golang

Bagaimana untuk membuang port dalam golang

PHPz
PHPzasal
2023-03-31 10:24:32665semak imbas

Dalam beberapa tahun kebelakangan ini, bahasa golang telah mendapat perhatian yang meluas di kalangan banyak pembangun. Sebabnya, golang mempunyai banyak kelebihan, seperti prestasi cemerlang, kecekapan tinggi, pengurusan ingatan lanjutan, dll. Walau bagaimanapun, menggunakan golang untuk pembangunan juga menghadapi beberapa masalah, salah satunya ialah cara mengeluarkan port. Dalam artikel ini, saya akan berkongsi cara membuang port menggunakan golang.

Pertama, kita perlu tahu apa itu port. Ringkasnya, port ialah protokol lapisan pengangkutan (seperti TCP atau UDP) yang digunakan untuk mengenal pasti sambungan antara rakan sebaya (seperti komputer anda dan pelayan tapak web). Dalam golang, kita boleh menggunakan port melalui pakej bersih. Berikut ialah contoh penggunaan mudah:

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()

    // 在这里处理连接
}

Kod ini menunjukkan cara menggunakan pakej bersih dalam golang untuk mendengar port TCP dan mengendalikan sambungan yang telah ditetapkan. Walau bagaimanapun, kami memberi tumpuan kepada cara mengalih keluar port, bukan cara menggunakan port.

Seterusnya, kami akan memperkenalkan cara menggunakan golang untuk mengeluarkan port. Katakan kita ingin mendengar sambungan TCP tanpa port pada localhost, kita boleh menggunakan kod berikut:

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()

    // 在这里处理连接
}

Kod ini boleh dialih keluar dengan menetapkan parameter alamat port TCP kepada port : . Ini berfungsi dalam banyak keadaan. Walau bagaimanapun, dalam beberapa majlis khas, kita mungkin memerlukan kawalan yang lebih terperinci ke atas perkara ini.

Untuk mengawal alamat IP dan port yang dipantau dengan lebih baik, kami boleh menggunakan fungsi net.InterfaceAddrs() untuk mengikat. Berikut ialah contoh kod:

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()

    // 在这里处理连接
}

Kod ini mengambil senarai alamat IP untuk antara muka, kemudian berulang melalui setiap alamat dan cuba untuk mengikat pendengar tanpa port pada alamat tersebut. Pada masa yang sama, selepas setiap pengikatan yang berjaya, kami akan mencetak alamat terikat dan maklumat pelabuhan. Sudah tentu, kita juga boleh menapis bahagian port melalui hasil output untuk mengeluarkan port.

Ringkasnya, sangat mudah untuk menggunakan golang untuk mengeluarkan port Anda hanya perlu memahami beberapa fungsi praktikal yang disediakan dalam pakej bersih. Seterusnya, saya harap artikel ini akan membantu anda dan membolehkan anda mengawal port dengan lebih tepat dalam pembangunan golang.

Atas ialah kandungan terperinci Bagaimana untuk membuang port dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn