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)

XMLSocket

あと、最近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イベントに登録しておく。