2010-12-14 23 views
1

私はC#メッセンジャーアプリケーションを楽しいものにしていますが、私はそれをうまくやりたいのです。 私はチャットメッセージやキックなどのコマンドを送る可能性を望んでいますが、それを制御する良い方法はわかりません。C#messenger、ネットワーク経由でコマンドを送信する、プロトコル?

ネットワークストリーム経由でオブジェクトを送信することもできますし、次のような文字列を送信することもできます:stream.write( "command ##");

多分、あなたはこのことを解決する別の方法を知っていますが、私はstackoverflow atmにいます。おかげさまで

+4

私はWCFを使用して、Microsoftはすべてやらせるだろうあなたのためのハードネットワーキングの仕事。 –

+1

古い引用を言い換えると、「問題が発生したときには、「わかっていますが、WCFを使用します。今、彼らには2つの問題があります。私は同意するWCFとNet.TCPのようなデュプレックスバインディングの1つは、おそらくこれに近づける最善の方法です:私のポイントは、MSがWCFであってもやることが大変な仕事です。 –

答えて

0

ちょうど何らかの制御文字(like)があります...サーバがその文字を見ると、スペース文字を受け取るまで記録を開始します。スペースに達すると、文字列を見て、利用可能なコマンドのリスト(\ kickなど)と比較します。

これは、この問題に取り組む1つの手法です。正直言って、もしあなたが楽しいことをしているのであれば、コードを書くのが最も楽しい方法を実装してください:-)

0

あなたの「楽しみ」プロジェクトを「プロフェッショナル開発」プロジェクトに変えたいなら、あなたのスキルを開発し、専門的な品質ではない)WCFを試してみてください。それはあなたのためのメッセージングアーキテクチャ全体を処理し、あなたの機能に焦点を当てさせます。さらに、WCFは履歴書によく見えます。

1

あなたの質問にStream.Write()を使用してソケットを構築しているようです。

メッセージタイプとある種のチェックサムを持つバイト配列を作成することができます。例:あなたは単純な文字列を送信することを越えて行くことがadventerous感じたら

 string message = "this is your message"; 
     byte packetType = 1; 
     byte checksum = 0; 

     // calculate a simple checksum 
     foreach (char c in message) 
     { 
      checksum ^= (byte)c; 
     } 


     // type, message, checksum into buffer 
     // (uses list instead of playing with arrays for expeditious example code) 
     List<byte> buffer = new List<byte>(); 
     buffer.Add(packetType); 
     buffer.AddRange(ASCIIEncoding.UTF8.GetBytes(message)); 
     buffer.Add(checksum); 

     // write out to the socket 
     CommStream.Write(buffer.ToArray(), 0, buffer.Count); 

、実行時の名前空間を使用してバイト配列にシリアライズオブジェクトを試みることができます。

using System.IO; 
    using System.Runtime.Serialization.Formatters.Binary; 

    public class Message : ISerializable 
    { 
     DateTime timestamp; 
     byte type; 
     string message; 
    } 

    public byte[] BuildBuffer(Message input) 
    { 
     // Serialize the message 
     Stream s = new MemoryStream(); 
     BinaryFormatter binaryFormatter = new BinaryFormatter(); 
     binaryFormatter.Serialize(s, input); 
     buffer = s.ToArray(); 

     return buffer; 
    } 

    public Message BuildMessage(byte[] input) 
    { 
     Stream s = new MemoryStream(input); 
     s.Position = 0; 

     BinaryFormatter binaryFormatter = new BinaryFormatter(); 
     return (Message)binaryFormatter.Deserialize(s); 
    }