目次
1。GOのソケットの理解
2。シンプルなTCPサーバーの構築
3。TCPクライアントの書き込み
4。UDPとの作業
5。ベストプラクティスとヒント
最終的な考え
ホームページ バックエンド開発 Golang ネットワークプログラミングとソケットに移動します

ネットワークプログラミングとソケットに移動します

Jul 27, 2025 am 04:19 AM
sockets ネットワークプログラミング

GOはネットワークプログラミングに理想的な言語であり、その標準的なライブラリと軽量の並行性モデルにより、建物の高性能ネットワークサービスがシンプルで効率的になります。 1。GOのネットパッケージは、TCP、UDP、およびその他のプロトコル、およびnet.connインターフェイスを介した均一に抽象的な接続操作をサポートします。 2。Net.Listen( "TCP"、 ":8080")を使用してTCPサーバーを作成し、ristener.accept()を介して接続を受信し、ゴルーチンを使用して各接続の並行性を処理して高い並行性を達成します。 3. TCPクライアントは、net.dial( "TCP"、 "localhost:8080")を使用してサーバーに接続し、ゴルチンを介して入力を送信し、メインループから応答を読んで双方向通信を実現します。 4。UDPプログラミングは、net.listenudpとnet.dialudpを使用します。これには、接続確立は必要ありません。低遅延のシナリオには適していますが、パケットの損失とシーケンスの問題を自分で処理する必要があります。 5.ベストプラクティスには、ゴロウチンの合理的な使用、読み取りおよび書き込みタイムアウトの設定、エラーの取り扱い、TLS暗号化の採用、およびBufioを使用したテキストプロトコル処理の簡素化が含まれます。 GOのネットワークプログラミングモデルのマスターは、スケーラブルなバックエンドおよび分散システムの構築に役立ち、開発者が投資するに値する学習方向です。

ネットワークプログラミングとソケットに移動します

ネットワークプログラミングに飛び込んでいる場合、Go(Golang)は優れた選択です。同時性とネットワークを念頭に置いて設計されているため、スケーラブルで高性能ネットワークサービスの構築に自然に適合しています。 Webサーバー、API、プロキシ、またはカスタムTCP/UDPサービスを構築するかどうかにかかわらず、Goの標準ライブラリと軽量の並行性モデル(Goroutines)がソケットをクリーンで効率的に使用します。

ネットワークプログラミングとソケットに移動します

GOのネットワークプログラミングとソケットを開始するための実用的なガイドを次に示します。


1。GOのソケットの理解

Goでは、 netパッケージはネットワーク操作のための頼りになります。 TCP、UDP、UNIXソケット、さらには生のIP接続をサポートします。コアでは、低レベルのソケット操作を使いやすいインターフェイスに抽象化します。

ネットワークプログラミングとソケットに移動します

接続の2つの主なタイプ:

  • TCP :信頼性、接続指向(例:HTTP、SSH)
  • UDP :コネクションレス、より高速ですが信頼性が低い(例、DNS、ビデオストリーミング)

Goは、これらをnet.Connインターフェイスの実装として扱うので、一貫した方法で作業することができます。

ネットワークプログラミングとソケットに移動します

2。シンプルなTCPサーバーの構築

ポート8080に耳を傾ける基本的なTCPエコーサーバーを作成し、受信するメッセージをエコーしています。

パッケージメイン

輸入 (
    「ブフィオ」
    「FMT」
    "ログ"
    "ネット"
))

func main(){
    // TCPポート8080で聞いてください
    リスナー、err:= net.listen( "tcp"、 ":8080")
    err!= nil {
        log.fatal( "サーバーを起動できなかった:"、err)
    }
    reaster.close()defer

    fmt.println( "サーバーリスニング:8080")

    のために {
        //着信接続を受け入れます
        conn、err:= listener.accept()
        err!= nil {
            log.println( "接続を受け入れなかった:"、err)
            続行します
        }

        //新しいGoroutineで各接続を処理します
        Handleconnection(conn)に行く
    }
}

func handleconnection(conn net.conn){
    defer conn.close()

    スキャナー:= bufio.newscanner(conn)
    for scanner.scan(){
        メッセージ:= scanner.text()
        fmt.printf( "受信:%s \ n"、メッセージ)

        //エコーバック
        _、err:= conn.write([] byte( "echo:" message "\ n"))
        err!= nil {
            log.println( "write error:"、err)
            戻る
        }
    }
}

キーポイント:

  • net.Listen("tcp", ":8080")サーバーを起動します。
  • listener.Accept() 、クライアントをブロックして待機します。
  • 各接続はゴロウチンで処理されます。これはGoの超大国です。シンプルになりました
  • bufio.Scanner 、ラインバイライン(テキストプロトコルに役立ちます)を読み取ります。

3。TCPクライアントの書き込み

これで、サーバーをテストする簡単なクライアント:

パッケージメイン

輸入 (
    「ブフィオ」
    「FMT」
    "ログ"
    "ネット"
    「OS」
))

func main(){
    conn、err:= net.dial( "tcp"、 "localhost:8080")
    err!= nil {
        log.fatal( "接続できなかった:"、err)
    }
    defer conn.close()

    //ユーザー入力をサーバーに送信します
    go func(){
        スキャナー:= bufio.newscanner(os.stdin)
        for scanner.scan(){
            msg:= scanner.text()
            _、err:= conn.write([] byte(msg "\ n"))
            err!= nil {
                log.println( "send error:"、err)
                戻る
            }
        }
    }()

    //サーバーから応答を読み取ります
    読者:= bufio.newreader(conn)
    のために {
        応答、err:= reader.readstring( '\ n')
        err!= nil {
            log.println( "read error:"、err)
            壊す
        }
        fmt.print( "server:"、response)
    }
}

このクライアント:

  • サーバーに接続します。
  • Goroutineでユーザー入力を送信します。
  • メインループでサーバーの応答を読み取り、印刷します。

4。UDPとの作業

UDPはConnectionLessなので、 net.ListenUDPnet.DialUDPを使用します。

UDPサーバーの例:

パッケージメイン

輸入 (
    「FMT」
    "ログ"
    "ネット"
))

func main(){
    addr、err:= net.resolveudpaddr( "udp"、 ":8080")
    err!= nil {
        log.fatal(err)
    }

    conn、err:= net.listenudp( "udp"、addr)
    err!= nil {
        log.fatal(err)
    }
    defer conn.close()

    バッファ:= make([] byte、1024)
    のために {
        n、clientaddr、err:= conn.readfromudp(バッファー)
        err!= nil {
            log.println( "read error:"、err)
            続行します
        }

        fmt.printf( "%s:%s \ n"から受信、clientAddr、string(buffer [:n]))

        //エコーバック
        _、err = conn.writeToudp([] byte( "echo:" string(buffer [:n]))、clientAddr)
        err!= nil {
            log.println( "write error:"、err)
        }
    }
}

注:UDPは配信や注文を保証しません。速度が信頼性よりも重要な場合に使用します。


5。ベストプラクティスとヒント

  • ゴルチンを賢く使用します。新しいゴルウチンの各接続は、最新の負荷には問題ありませんが、高度なシステムでは、ワーカープールまたは接続制限を検討してください。
  • タイムアウトの設定conn.SetReadDeadline()conn.SetWriteDeadline()を使用して、接続を吊るしないようにします。
  • エラーの処理:ネットワークコードの失敗 - ReadWriteAcceptなどのエラーを常に確認してください。
  • セキュリティにTLSを使用してくださいtls.Listen()およびtls.Dial()は、暗号化された通信のためにnet対応物と同じように機能します。
  • ラインベースのプロトコルよりもbufio好む:テキストストリームの読み取りを簡素化します。

最終的な考え

ネットワークプログラミングをアクセスしやすくパフォーマンスにします。最小限のコードを使用すると、堅牢なサーバーとクライアントを構築できます。 netパッケージ、ゴルチン、およびチャネルの組み合わせにより、スレッドやコールバックの複雑さなしに同時ネットワークアプリを作成できます。

マイクロサービス、プロキシ、またはリアルタイムシステムを構築するかどうかにかかわらず、Goのソケットとネットワーキングへのアプローチは、コントロールとシンプルさの両方を提供します。

基本的に、バックエンドまたは分散システムに真剣に取り組む場合、Goのネットワークモデルの習得は十分に費やされています。

以上がネットワークプログラミングとソケットに移動しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

C++ オープンソース ライブラリとは何ですか? C++ オープンソース ライブラリとは何ですか? Apr 22, 2024 pm 05:48 PM

C++ は、次の機能をカバーするオープン ソース ライブラリの豊富なセットを提供します: データ構造とアルゴリズム (標準テンプレート ライブラリ) マルチスレッド、正規表現 (Boost) 線形代数 (Eigen) グラフィカル ユーザー インターフェイス (Qt) コンピューター ビジョン (OpenCV) 機械学習(TensorFlow) 暗号化 (OpenSSL) データ圧縮 (zlib) ネットワーク プログラミング (libcurl) データベース管理 (sqlite3)

C++ 関数はネットワーク プログラミングで DNS クエリをどのように処理しますか? C++ 関数はネットワーク プログラミングで DNS クエリをどのように処理しますか? Apr 27, 2024 pm 06:39 PM

C++ 標準ライブラリは、ネットワーク プログラミングで DNS クエリを処理する関数を提供します。 gethostbyname(): ホスト名に基づいてホスト情報を検索します。 gethostbyaddr(): IP アドレスに基づいてホスト情報を検索します。 dns_lookup(): DNS を非同期的に解決します。

Java ネットワーク プログラミングの一般的なプロトコルは何ですか? Java ネットワーク プログラミングの一般的なプロトコルは何ですか? Apr 15, 2024 am 11:33 AM

Java ネットワーク プログラミングで一般的に使用されるプロトコルには次のものがあります。 TCP/IP: 信頼性の高いデータ送信と接続管理に使用されます。 HTTP: Web データの送信に使用されます。 HTTPS: 暗号化を使用してデータを送信する安全なバージョンの HTTP。 UDP: 高速だが不安定なデータ転送。 JDBC: リレーショナル データベースと対話するために使用されます。

Java ネットワーク プログラミングでは、コネクションレス通信に UDP をどのように使用しますか? Java ネットワーク プログラミングでは、コネクションレス通信に UDP をどのように使用しますか? Apr 15, 2024 pm 12:51 PM

UDP (User Datagram Protocol) は、時間に敏感なアプリケーションで一般的に使用される軽量のコネクションレス型ネットワーク プロトコルです。これにより、アプリケーションは TCP 接続を確立せずにデータを送受信できるようになります。サンプル Java コードを使用して UDP サーバーとクライアントを作成できます。サーバーは受信データグラムをリッスンして応答し、クライアントはメッセージを送信して応答を受信します。このコードを使用して、チャット アプリケーションやデータ収集システムなどの実際のユースケースを構築できます。

Pythonでできるプロジェクトは何ですか? Pythonでできるプロジェクトは何ですか? Apr 11, 2024 am 03:43 AM

Python は次のアプリケーションに使用できます。 Web サイト開発 (Django、Flask) データ サイエンス (NumPy、Pandas) 人工知能と機械学習 (TensorFlow、Keras) スクリプト自動化 デスクトップ アプリケーション (PyQt、tkinter) ゲーム開発 Web プログラミング (asyncio、Tornado) ) データ視覚化 (Matplotlib、Seaborn)

スクラッチとパイソンの違い スクラッチとパイソンの違い Apr 20, 2024 pm 11:59 PM

Scratch と Python の違いは次のとおりです。 対象読者: Scratch は初心者および教育現場を対象としているのに対し、Python は中級から上級のプログラマーを対象としています。構文: Scratch はドラッグ アンド ドロップのビルディング ブロック インターフェイスを使用しますが、Python はテキスト構文を使用します。特徴: Scratch は使いやすさとビジュアル プログラミングに重点を置いているのに対し、Python はより高度な機能と拡張性を提供します。

ネットワーク プログラミングで C++ 関数はネットワーク ファイアウォールをどのように実装しますか? ネットワーク プログラミングで C++ 関数はネットワーク ファイアウォールをどのように実装しますか? Apr 26, 2024 pm 04:18 PM

ネットワーク ファイアウォールは、C++ 関数を使用してネットワーク プログラミングで簡単に実装できます。 具体的な手順は次のとおりです。 データ パケットの有効性をチェックする関数を作成します。 送信元 IP アドレスが許可されているかどうかを確認します。 ポート番号が許可されているかどうかを確認します。パケット タイプが許可されている データ パケットを処理する関数を作成します。 無効なパケットを破棄して有効なパケットを許可します。 ファイアウォール オブジェクトを作成し、許可される IP アドレス、ポート番号、およびパケット タイプを設定します。 ネットワーク トラフィックをリッスンし、受信したパケットを処理します。

C言語ってどんな仕事ができるの? C言語ってどんな仕事ができるの? Apr 13, 2024 pm 06:24 PM

C 言語は主にソフトウェア開発の分野で使用されます。 可能な仕事には以下が含まれます。 オペレーティング システム開発: オペレーティング システム カーネル、ドライバー、ツール 組み込みシステム プログラミング: マイクロコントローラーおよびセンサー ファームウェア ゲーム開発: ゲーム エンジン、ロジックおよびグラフィック レンダリング ネットワーク プログラミング: サーバー、クライアントとプロトコル データベース管理: DBMS とデータベース操作 クラウド コンピューティング: インフラストラクチャ、仮想化、分散アプリケーション 人工知能: 機械学習アルゴリズム、ビジョン、自然言語処理 科学コンピューティング: データ分析、数値シミュレーション、視覚化

See all articles