Go でネットワーク アプリケーションを操作する場合、net.Conn.Read メソッドは便利な方法を提供します。接続からデータを受信します。ただし、事前に決定されたバイト配列を読み取ることで動作するため、開発者は正確なデータ長を予測するという課題が残ります。
固定長バイト配列の指定make([]byte, 2048) などの -length バイト配列では、2 つの可能性が考えられます。問題:
これらの制限を克服するには、io.Copy 関数を利用できます。これは、2 つの間でデータを転送する堅牢かつ効率的なアプローチを提供します。 io互換接続。 bytes.Buffer オブジェクトを作成し、net.Conn からのデータをそれにパイプすることで、必要に応じて動的にバッファーを拡張し、正確な量のデータが確実にキャプチャされるようにすることができます。
これは、正確なデータ読み取りのために io.Copy を使用する方法を示すコード スニペットの例です。
package main import ( "bytes" "fmt" "io" "net" ) func main() { conn, err := net.Dial("tcp", "google.com:80") if err != nil { fmt.Println("dial error:", err) return } defer conn.Close() fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") var buf bytes.Buffer io.Copy(&buf, conn) fmt.Println("total size:", buf.Len()) }
この例では、 Google の Web サーバーに TCP 接続し、HTTP リクエストを送信し、bytes.Buffer と io.Copy を使用して応答データを動的にキャプチャします。結果として得られる buf オブジェクトには完全な応答が含まれており、転送されたデータの正確な量を確実に読み取ることができます。
このアプローチを利用することで、事前定義されたバイト配列による制限を受けることなく、ネットワーク接続からデータを確実に受信できます。
以上がGolang を使用して net.Conn から正確な量のデータを読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。