Go言語でネットワークプログラミング機能を学び、TCP/IP通信を実装する
Go 言語でネットワークプログラミング機能を学び、TCP/IP 通信を実装しよう
Go 言語は、高効率、低遅延という特徴を備えたオープンソースのプログラミング言語であるため、多くの分野で使用されています。ネットワークプログラミング。 Go 言語が提供するネットワークプログラミング関数を利用することで、簡単に TCP/IP 通信を実装することができますので、この記事では Go 言語のネットワークプログラミング関数を学習して TCP/IP 通信を実装する方法を紹介します。
Go 言語によるネットワーク プログラミング関数には、主に net パッケージと bufio パッケージの関数が含まれます。その中で、net パッケージはネットワーク ソケットへのアクセスを提供し、bufio パッケージはバッファの読み取りおよび書き込み機能を提供します。これら 2 つのパッケージの連携作業により、ネットワーク データの送受信を簡単に処理できます。
まず、net パッケージと bufio パッケージをインポートする必要があります。
import ( "net" "bufio" )
次に、クライアントのリクエストを受信してウェルカム メッセージで応答する TCP サーバーを作成できます。以下は簡単なサンプル コードです。
func main() { // 监听端口 listen, err := net.Listen("tcp", "localhost:8080") if err != nil { log.Fatal(err) } defer listen.Close() // 接收客户端连接 conn, err := listen.Accept() if err != nil { log.Fatal(err) } defer conn.Close() // 创建缓冲区进行读写 reader := bufio.NewReader(conn) writer := bufio.NewWriter(conn) // 读取客户端的请求 request, err := reader.ReadString(' ') if err != nil { log.Fatal(err) } // 回复客户端的请求 response := "欢迎光临! " _, err = writer.WriteString(response) if err != nil { log.Fatal(err) } // 刷新缓冲区,确保数据发送到客户端 err = writer.Flush() if err != nil { log.Fatal(err) } }
上の例では、まず net.Listen 関数を使用してリスナーを作成し、TCP プロトコルとポート番号を指定します。次に、listen.Accept 関数を呼び出してクライアントの接続要求を受信し、クライアントと通信するためのソケット接続を作成します。
次に、ソケット接続からデータを読み取ったり送信したりするための bufio.Reader オブジェクトと bufio.Writer オブジェクトを作成します。 Reader.ReadString 関数を呼び出すと、クライアントから送信されたリクエストを読み取ることができ、writer.WriteString 関数を呼び出すと、クライアントのリクエストに応答することができます。
最後に、writer.Flush 関数を使用してバッファを更新し、データがクライアントに確実に送信されるようにします。上記の手順を完了すると、単純な TCP サーバーが正常に実装されました。
TCP サーバーの作成に加えて、TCP クライアントを作成し、サーバーに接続してリクエストを送信することもできます。簡単なサンプルコードは次のとおりです:
func main() { // 连接服务器 conn, err := net.Dial("tcp", "localhost:8080") if err != nil { log.Fatal(err) } defer conn.Close() // 创建缓冲区进行读写 reader := bufio.NewReader(conn) writer := bufio.NewWriter(conn) // 发送请求 request := "Hello, world! " _, err = writer.WriteString(request) if err != nil { log.Fatal(err) } // 刷新缓冲区,确保数据发送到服务器 err = writer.Flush() if err != nil { log.Fatal(err) } // 读取服务器的响应 response, err := reader.ReadString(' ') if err != nil { log.Fatal(err) } fmt.Println(response) }
以上がGo言語でネットワークプログラミング機能を学び、TCP/IP通信を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

携帯電話でXMLをPDFに直接変換するのは簡単ではありませんが、クラウドサービスの助けを借りて実現できます。軽量モバイルアプリを使用してXMLファイルをアップロードし、生成されたPDFを受信し、クラウドAPIで変換することをお勧めします。クラウドAPIはサーバーレスコンピューティングサービスを使用し、適切なプラットフォームを選択することが重要です。 XMLの解析とPDF生成を処理する際には、複雑さ、エラー処理、セキュリティ、および最適化戦略を考慮する必要があります。プロセス全体では、フロントエンドアプリとバックエンドAPIが連携する必要があり、さまざまなテクノロジーをある程度理解する必要があります。

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...
