TCPでは、[移動]データ転送サービス


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))
    } 
}

 

おすすめ

転載: www.cnblogs.com/taoshihan/p/11879335.html