[C#] 画像ファイルをbase64エンコードしてTCP/IPで送信する(Convert.ToBase64String)

Pocket

ここでは、png画像ファイルをbase64エンコードして、TCP/IPでリモート端末に送信するサンプルコードを掲載しています。

スポンサーリンク

画像ファイルをbase64エンコードしてTCP/IPで送信

下記がそのサンプルスクリプトになります。詳細はサンプル内のコメントを参照ください。また、送信するpng画像ファイルは次の画像です。世界チャンピオンです。

OK牧場

そういえば山中慎介が負けちゃいました。V13ならず。残念でした。


    string okFileName = @"D:\OK.png"; // ファイルパス

    // 画像ファイルを読み込む(OK牧場!)
    FileStream okFile = new FileStream(okFileName, FileMode.Open, FileAccess.Read);
    byte[] bs = new byte[okFile.Length];

    // [注意]
    // 大きいファイル int 型の最大値以上はNG(未検証)
    int readBytes = okFile.Read(bs, 0, (int)okFile.Length);
    // ファイルを閉じる
    okFile.Close();

    // Base64エンコードで文字列に変換
    string base64String = Convert.ToBase64String(bs);

    // サーバのIPアドレス(または、ホスト名)とポート番号
    string remoteHost = "192.168.4.200";
    int port = 21111;

    // TCPでサーバに接続
    TcpClient tcp = new TcpClient(remoteHost, port);
    NetworkStream ns = tcp.GetStream();

    // Base64文字列をByte配列に変換して送信する
    byte[] sendData = Encoding.UTF8.GetBytes(base64String);
    ns.Write(sendData, 0, sendData.Length);

    // リソースの開放
    ns.Close();

    // 切断する
    tcp.Close();

 

以下のリンクに、受信側のサンプルコードもあります。ただし、受信側は Android 端末でのサンプルコードです。

[android開発] TCPで受信した文字列をbase64デコードしてファイルに出力する(Base64.decode)

なぜポート番号が int 型なのか

上記サンプルコードでもわかるように、ポート番号の型は int 型です。なぜなんでしょうか?昔からポート番号は unsigned short と相場は決まっています。だって、2バイトですからね。

ポート番号を2バイトにしたことを後悔しているのでしょうか?そうだとしても今更変更できるはずもありません。

すこぶる不思議です。

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *