ここでは、png画像ファイルをbase64エンコードして、TCP/IPでリモート端末に送信するサンプルコードを掲載しています。
スポンサーリンク
画像ファイルをbase64エンコードしてTCP/IPで送信
下記がそのサンプルスクリプトになります。詳細はサンプル内のコメントを参照ください。また、送信するpng画像ファイルは次の画像です。世界チャンピオンです。
そういえば山中慎介が負けちゃいました。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バイトにしたことを後悔しているのでしょうか?そうだとしても今更変更できるはずもありません。
すこぶる不思議です。