TCPサービスを実現するために行く、最初の要求を受け、ポートを監視することで、この場所が待ってブロックされる
クライアントがオーバー接続すると、あなたが複数の同時接続を処理することができますので、このクライアントに対処するためのTCP接続grountineを開きます。
関連して、あなたが要求クライアントのデータ処理を停止することができないので、クライアント上のデータ伝送を読むためにリサイクルされる
読み取りデータにバイトがそう簡単に何を参照するには受信され、読み取り専用のI毎回リードサイズ0またはバイトを読み取る場合、このサイクルで受信したデータをステッチデータ必須サイクルを読み出す際のデータは、そう\ N、Iは、ループを終了します。
それが切断されたときに、これは私のバイトデータのスライス10にtmpByte [0]を受信するようにASCIIの\ nは10として符号化されたため
参照テーブルアスキー、クライアントは、英語の文字を送信に関する収集データに次のコードを実行すると、漢字に収集した特定のデータを渡すことによって見ることができます
クライアントが通過する:
サーバが受信する:
1 [97] Aバイト、ASCIIがAに対応する、97としてエンコード
1 [13] Aバイト、13としてエンコードASCII、対応する制御文字CR、ホームキー
1 [10]バイト、10としてエンコードASCII、対応する制御文字LF、改行
クライアントが通過する:あなたの
サーバが受信する:
1 [228] 3バイト
1 [189]
1 [160]
1 [13]上記のものと同じ意味以下、多分
[10] 1
アスキーをコードする、英語の文字の次のバイト、UTF8をコードする、漢字の3つのバイト
完全なコード:
主パッケージ のインポート( " FMT " " NET " ) FUNCメイン(){ // リスニングポート リスナー、_:= net.Listen(" TCP "、" 0.0.0.0:5921 " ) // サイクルブロッキング受信、同時処理しながら接続数 のために{ コネチカット、_: = listener.Accept() 行くhandleConn(コネチカット) } } FUNC handleConn(コネチカットnet.Conn){ // 周期がデータの処理を停止する ために{ tmpByte: = メイク([] バイト、1) VarのResData [] バイト // ループデータを読み出す ための{ lenを、_: = conn.Read(tmpByte) FMT .Println(LEN、tmpByte) // リード長さ0、またはラインフィードを読み取るためにオフ IF LEN == 0 || tmpByte [ 0 ] == 10 { BREAK } // スプライシングはデータ読み取り ResData = アペンド(ResData、tmpByte ...) } :STR = FMT .Sprintfを(" 受信:%sの\ N- "、文字列(ResData)) conn.Write([] バイト(STR)) } }