OpenSourceの.NET FrameworkであるMonoをインストールして、C#で作ったXMLSocketServer.exeをcoLinux上のDebian 3.2で動かしてみた。

VisualStudioでコンパイルしてできた.exeのままで、ちゃんとdllも読み込んで動作してくれるのが凄い。

(.NETなので、VB.NETで書いたプログラムも同じようにLinuxで動くはず)

C# on Mono

Flash Media Serverは高いので、flvのストリーミング以外ならサーバーサイドも自分で全部作った方がよさげ。

ちなみにMonoいれてみたきっかけは、きょろさんがおすすめしてたから

New Generation Chronicle:井上恭輔——電子工作より生まれし巫女萌えバイナリアン (1/10) – ITmedia エンタープライズ

■インストール

.NETFramework on Linux (Mono) (TORIGOE DESIGN. doc)を参考に、最新版1.2.6をダウンロードしてインストールした

wget ftp://www.go-mono.com/archive/1.2.6/linux-installer/6/mono-1.2.6_6-installer.bin

chmod +x mono-1.2.6_6-installer.bin

./mono-1.2.6_6-installer.bin

aptから入れる事は出来ないけど、インストールはとても簡単だった。

■プログラムの作り方

普通に「コンソールアプリケーション」を選んで、コンパイルしてできた .exe がそのままLinuxで動くようになる。

できたもの => MonoTest (Visual Studio2005 / C#2.0)

■作ったプログラム

まず最初に、スレッドでループし続けて1秒ごとに現在の時刻を表示するプログラムを作った => SourceCode

C# on Mono - Thread and DateTime

次に、正月にDLL化したXMLSocket.NETの機能を使って、Flash(Windows上)とXMLSocketServer(Debian上)とで、XMLSocketCommandのやりとりをやってみた。

C# on Mono - XMLSocketServer

=> SourceCode

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Net;

usingSystem.Net.Sockets;

usingOrg.Shokai.Net.XMLSocket;

namespaceMonoTest

{

classMonoXMLSocketServer

{

privateOrg.Shokai.Net.XMLSocket.Commandercommander;

staticvoidMain(string[]args)

{

MonoXMLSocketServerapp=newMonoXMLSocketServer();

app.Run();

}

publicMonoXMLSocketServer()

{

commander=newCommander();

commander.xmlSocketServer.MaxClients=3;

commander.onRecvCommand+=onRecvData;

commander.onAcceptClient+=onAcceptClient;

}

publicvoidRun()

{

Console.WriteLine(“run”);

commander.Listen(IPAddress.Any,5500);

Stringinput=””;

while(input!=”exit”){

input=Console.ReadLine();

commander.Broadcast(newCommand(“NoName”,input));

}

commander.Close();//終了

}

publicvoidonAcceptClient(TcpClientclinet)

{

Console.WriteLine(“acceptnewclient”);

}

publicvoidonRecvData(Org.Shokai.Net.XMLSocket.Commandcommand)

{

Console.WriteLine(“receive=>”+command.ToString());

}

}

}

まだ速度とかは調べてないけど、とにかくそのまま動いてしまうのは凄い。

あと、ネットワークとスレッドまわりはC#はけっこう良いと思うので、いいんじゃないですか

追記:

Macでも試してみたけど、XMLSocketServerの方だけ動かない。

ClientをAcceptした時に “Object reference not set to an instance of an object” という警告が出る