Org.Shokai.Net.XMLSocket
を作ったよ!あとついでにAS3でのXMLSocketクライアントのサンプルものせておく。
■これは何?
FlashのXMLSocketクライアントを受けるためのC#用のサーバークラス。
Threadの事を考えないで、簡単に使えるようにしてある。同時に複数クライアント受け入れ可能。
XML Parserは内蔵していないので、受け取ったデータは
s.h.log: C#でRSSリーダを作ってみるテスト
を参考にしてParseして欲しい
■XMLSocketって何?
FlashはAS3から普通のSocketが使えるようになって、バイナリデータを送ったりするのが簡単になったんだけど
昔からXMLSocketというのがあってよく使われていた。
まあ結局 ‘\0’ を末尾に付けたただの、文字列でXMLを送るSocketなんだけど。
■サンプル
・Flash側 (Flash CS3 / AS3.0)
・C#側 (VisutalStudio2005 / C#2.0)
あと、最近FlashDevelopをAS3エディタとして使い始めたんだけど凄く良い。
■使い方
基本的にKY(コード嫁)だけど、やっぱ自分用にメモ。
この辺を読み込んでおく
usingOrg.Shokai.Net.XMLSocket;
usingSystem.Net;
usingSystem.Net.Sockets;
起動前の準備。同時接続数などを設定する。
xmlSocketServer=newXMLSocketServer();
xmlSocketServer.MaxClients=5;
データの受信などのイベント登録は、まず関数を宣言しておいてから
publicvoidonRecvXMLSocketData(Org.Shokai.Net.XMLSocket.XMLMessagemessage){
Console.WriteLine(“受信データ:”+message.data);
}publicvoidonAcceptXMLSocketClient(System.Net.Sockets.TcpClientclient)
{
Console.WriteLine(“接続、接続数:”+xmlSocketServer.Clients.Count);
}
delegateの += で登録する
xmlSocketServer.onAcceptClient+=onAcceptXMLSocketClient;//クライアント接続イベント
xmlSocketServer.onRecvData+=onRecvXMLSocketData;//データ受信イベント
関数呼び出しはスレッド越しになるので、UI要素を変更する時は
s.h.log: C#2.0 – 無名関数をControl.Invoke()する
を使う。
クライアントの受け入れを開始する。この例ではどこからでも、5500番ポートに接続できる。
xmlSocketServer.Listen(IPAddress.Any,5500);
新しいクライアントが接続してきた時/データを受信した時は、上で登録しておいたイベントが呼ばれる。
クライアントに向けて送信したい時はこう。
StringxmlStr=”
“;
xmlSocketServer.Send(xmlStr,0);
ただし、一応サーバーなので複数のクライアントが接続してくる。(最初にMaxClient = 1すれば1つしか来ないが)
送信先にはクライアントを選ばなければならない。この例では、0番目(一番最初に接続してきた奴、xmlSocketServer.Clients[0]で取得できる)に送信している
こういう書き方もできる
TcpClientclient=xmlSocketServer.Clients[0];
xmlSocketServer.Send(xmlStr,client);
ちなみに、xmlSocketServer.Broadcast(xmlStr);すると全クライアントに送信できる。
最後に、アプリケーションを終了させる前に
xmlSocketServer.Close();
を呼ぶ。これを呼ばないと裏で回っているThreadを閉じれないので、絶対に呼ぶ。FormのFormClosedイベントに登録しておく。