すがブロ

sugamasaoのhatenablogだよ

FTPクライアントを作ってみよう(4)

TCPネットワークを行うには TcpClient というクラスと NetworkStream というクラスを上手いこと使えば良いらしい。
ネームスペースはこれ。

System.Net.Sockets;

で、基本的にはTcpClientクラスを使ってコネクションを張って、NetworkStreamクラスで送受信を行うみたい。

Byte[] buff = new Byte[1024];

TcpClient tcpClient = new TcpClient();
tcpClient.Connect("xxx.xxx.xxx.xxx", 80);
NetworkStream nwStream = tcpClient.GetStream();

// ネットワーク送信用文字列の生成(バイト列に変換)
buff = Encoding.ASCII.GetBytes("GET /index.html\r\n\r\n");

// ネットワークへ送信
nwStream.Write(buff, 0, buff.Length);
nwStream.Flush();

でやり取りができる。
本当は実際に動かしてみたいんだけど、ちょっとネットワーク通信とは別の不具合があってきちんと動くのを確認できないのであった。
ネットワークからデータを受信する時に、そのデータをスレッドで動かして受け取るようにしてるんだけど、そのスレッドで受け取ったデータを直接Formのテキストエリアへ吐こうとするとこんなエラーがでてしまうのだ。

                                                    • -

System.InvalidOperationException: 有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'resultBox' がアクセスされました。

                                                    • -

当然、別スレッドで動かしているのでフォームを生成したスレッドとは違うのはわかるんだが……。よくわからん。
ていうかもうちょっとスレッドについて勉強する必要があるなぁ。
FTPクライアントとか1〜2日でできると思ってたんだけど、そもそもの前提知識が足り無すぎるようだ。見積もり失敗!