2011-06-29 9 views
3

node.jsの学習の一環として、node.jsとsocket.ioの非常に基本的なチャットサーバーを作成しました。サーバーは基本的にchat.html wepページにアクセスした人をリアルタイムチャットに追加し、すべてが機能しているようです。C#クライアントをnode.js + socket.ioチャットアプリに統合

今、私はC#デスクトップアプリケーションを(Webブラウザコントロールを使用せずに)チャットに参加させたいと思います。

これについてはどのような方法が最適ですか?

+0

[C#用WebSocketクライアント(http://stackoverflow.com/questions/2064641/is-there-a-websocket-client-implemented-for-net/5257096#5257096)。より最適なソリューションは、socket.ioを介してTCPソケットを公開することですが、それは正しい痛みのように思えます。 – Raynos

答えて

1

HttpWebRequestクラスをお試しください。これはかなり使いやすく、System.Webや特定のWebブラウザなどのものに依存しません。私はブラウザの要求をシミュレートし、アプリケーションのテストで応答を分析します。柔軟性があり、要求ヘッダーごとに独自のヘッダーを設定できます(穏やかなサービスや特定のヘッダーを想定したサービスなど)。さらに、デフォルトではリダイレクトに従いますが、この動作は簡単に無効になります。新しい要求を作成

は単純です:

HttpWebRequest my_request = (HttpWebRequest)WebRequest.Create("http://some.url/and/resource"); 

リクエスト送信するには:

HttpWebResponse my_response = my_request.GetResponse(); 

を今、あなたは、あなたが正しいステータスコードを得たことを確認してくださいレスポンスヘッダを見て、あなたが持つことができますストリームオブジェクトを介したレスポンスボディへのアクセス。要求に投稿データ(HTMLフォームデータなど)を追加するなどの作業を行うには、リクエストオブジェクトのストリームにUTF8でエンコードされた文字列を書き込みます。

このライブラリは、どのWinFormsやWPFアプリケーションにも組み込むのが簡単です。 MSDNのドキュメントはかなり良いです。

ただし、応答が200-402の範囲にない場合、HttpWebRequestはキャッチする必要がある例外をスローします。幸いにも、あなたは依然としてレスポンスオブジェクトにアクセスすることができますが、例外を例外として扱わなければならないのは厄介なことです(特に例外はクライアントコードではなくサーバー側にあるためです)。

+0

Httpはsocket.ioのような双方向通信用に設計されておらず、長いポーリングを実装する必要があります.Net上にいる場合、Tcpソケットを使用するほうがはるかに意味があります。 – Benja

4

nodejsにソケットサーバーを作成し、TcpClientを使用して接続しました。

using (var client = new TcpClient()) 
{ 
    client.Connect(serverIp, port)); 
    using (var w = new StreamWriter(client.GetStream())) 
     w.Write("Here comes the message"); 
} 
+0

もう少し完全であるかもしれません。 socket.ioメッセージをどのように送信して取得するのかを説明していますが、これが最善の答えです。 – Benja