1. 背景の紹介
実際のアプリケーションでは、ネットワーク データの送信と共有を実現するために、さまざまなポートを転送する必要があることがよくあります。たとえば、一部のエンタープライズ アプリケーションでは、内部アプリケーションにアクセスして管理するために、外部ネットワークから内部ネットワーク上のサーバーにアクセス要求を転送する必要があります。このプロセスでは、ポート フォワーディングを使用する必要があります。
Golang は、効率的、安全、簡潔な新興プログラミング言語です。他の一般的なプログラミング言語では、Golang で記述されたコードを呼び出すことでポート転送を実行できます。
この記事では、Golang を使用してポート転送プログラムを作成する方法を紹介し、ネットワーク プログラミングの分野における Golang の利点を示します。
2. Golang はポート フォワーディングを実装します
Golang のポート フォワーディングは、標準ライブラリの net パッケージを使用してヘルプなしで操作できます。追加の依存ライブラリの数。
ポート転送の中心的な実装原則は、2 つのネットワーク接続を確立することです。1 つの接続は指定されたポートをリッスンし、もう 1 つの接続はデータ転送操作を処理します。受信したデータはゴルーチンを通じて同時に処理し、効率的なデータ転送を実現します。
コード例:
package main import ( "fmt" "net" ) func main() { listener, err := net.Listen("tcp", ":8888") if err != nil { fmt.Println("Error: ", err) return } for { conn, err := listener.Accept() if err != nil { fmt.Println("Error: ", err) continue } go handleConnection(conn) } } func handleConnection(conn net.Conn) { remote, err := net.Dial("tcp", "localhost:9999") if err != nil { fmt.Println("Error: ", err) return } defer remote.Close() defer conn.Close() go func() { _, err := copyData(conn, remote) if err != nil { fmt.Println("Error: ", err) return } }() _, err = copyData(remote, conn) if err != nil { fmt.Println("Error: ", err) return } } func copyData(dst net.Conn, src net.Conn) (int, error) { buf := make([]byte, 256) n, err := src.Read(buf) if err != nil { return 0, err } n, err = dst.Write(buf[:n]) if err != nil { return 0, err } return n, nil }
コードの説明:
上記のコードは、ローカル 8888 ポートをリッスンすることで外部ネットワーク サービスを提供します。クライアントがポート 8888 に接続すると、新しい goroutine が作成され、この goroutine がデータ転送操作を処理します。クライアントからデータを転送するときは、ローカル ポート 9999 へのネットワーク接続を確立し、この接続にデータを転送する必要があります。
上記のコードの効果は、ポート 8888 をローカルでリッスンすることです。このポートへのアクセス要求が行われると、要求は次のアドレスに転送されます。ローカルポート9999。 Telnet ツールを使用して、転送が正常かどうかをテストします。
ローカル ポート 8888 に接続すると、システム コンソールに「新しい接続を受信しました」というテキスト プロンプトが 1 行出力され、監視が成功したことが示されます。次に、次のコマンドに従ってポート 9999 に接続します。
$ telnet localhost 8888
接続が成功したら、「Hello World!」などのデータを入力し、Enter キーを押します。同じデータが別の端末に表示されるはずです。これは、データがシリアル ポートを介して別のポートに正常に転送されたことを示しています。
3. 概要
この記事の導入部を通じて、ネットワーク プログラミング作業に非常に役立つ、Golang を使用してポート フォワーディングを実装する方法を習得できたと思います。
一般に、Golang には効率性、セキュリティ、シンプルさという利点があり、ネットワーク プログラミングのニーズをより効果的に実現するのに役立ちます。
以上がGolang を使用してポート転送プログラムを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。