2017-01-06 13 views
1

現在、私のsocket.ioサーバーに私のC#クライアントのデータを供給しようとしています。しかし、サーバー上でメッセージを受け取る方法がわかりません。ソケットを介してC#からノードsocket.ioサーバーにデータを送信

マイサーバコード:すべての

const io = require('socket.io')(9000); 

io.on('connection', (socket) => { 
    console.log('Connected'); 
} 

初のWebSocketを使用している私は私がに耳を傾ける必要があり、どのイベントかわからないが、それにもかかわらず、私は(次のクライアントを使用して自分のサーバーにデータを送信することができませんシャープ)コード:

private void init() 
     { 
      // start socket connection 
      using (var ws = new WebSocket("ws://localhost:9000/socket.io/?EIO=2&transport=websocket")) 
      { 
       ws.OnMessage += (sender, e) => 
        API.consoleOutput("Message: " + e.Data); 

       ws.OnError += (sender, e) => 
        API.consoleOutput("Error: " + e.Message); 

       ws.Connect(); 
       ws.Send("server"); 
      } 
     } 

接続は機能しますが、サーバーのメッセージはどのようにして受信できますか?送信はエラーを起こさないので、動作すると思います。

+0

'socket.io'は' websocket'プロトコルを使っていないので、あなたの接続はうまくいかないと思います。したがって、 'c#' 'websocket'クライアントは' node.js' 'socket.io'サーバと通信できません。おそらく、 'c#' 'socket.io'クライアントに対してhttps://github.com/Quobject/SocketIoClientDotNetを試すことができます。 –

+0

これは見つかりませんでした。時代遅れのもののみ。後でそれを試みます。 – Cludch

+0

'SocketIoClientDotNet'のメンテナンスについてはわかりませんが、' websocket-sharp'を 'socket.io'サーバと直接通信することはできません。 https://github.com/sta/websocket-sharp/issues/81#issuecomment-104650660 –

答えて

1

これはnode.jsサーバーに接続するUWPアプリケーションで動作しています。基本的には、私たちが選んだ何かのURLに、ws://localhost:4200/socket.io/?EIO=3&transport=websocket

のように接続します。

これを設定すると、次のコード行でnode.jsソケットioライブラリに接続します。 「接続」で、この時点で

private async Task ConnectWebsocket() { 
     websocket = new MessageWebSocket(); 
     Uri server = new Uri(WebSocketURI); //like ws://localhost:4300/socket.io/?EIO=3&transport=websocket 

     websocket.Control.MessageType = SocketMessageType.Utf8; 
     websocket.MessageReceived += Websocket_MessageReceived; 
     websocket.Closed += Websocket_Closed; 
     try { 
      await websocket.ConnectAsync(server); 
      isConnected = true; 
      writer = new DataWriter(websocket.OutputStream); 
     } 
     catch (Exception ex) // For debugging 
     { 
      // Error happened during connect operation. 
      websocket.Dispose(); 
      websocket = null; 
      Debug.Log("[SocketIOComponent] " + ex.Message); 

      if (ex is COMException) { 
       Debug.Log("Send Event to User To tell them we are unable to connect to Pi"); 
      } 
      return; 
     } 
    } 

`

あなたのソケットIOは、あなたが通常のようにそれにイベントを発することができるサーバー

に発射する必要があります。 C#ソケットコード以外はではありません。ではさまざまなチャンネルを区別しています。以下は、我々はそのために、私は良い答えを持っていないので、私たちのサーバーにメッセージを送信する必要はありませんでした私たちの特定のアプリケーションで(別名SocketDataとSocketIOEventは、我々が定義したクラスである)

private void Websocket_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) { 
     try { 
      using (DataReader reader = args.GetDataReader()) { 
       reader.UnicodeEncoding = UnicodeEncoding.Utf8; 

       try { 
        string read = reader.ReadString(reader.UnconsumedBufferLength); 
        //read = Regex.Unescape(read); 
        SocketData socc = SocketData.ParseFromString(read); 
        if (socc != null) { 
         Debug.Log(socc.ToString()); 
         SocketIOEvent e = new SocketIOEvent(socc.channel, new JSONObject(socc.jsonPayload)); 
         lock (eventQueueLock) { eventQueue.Enqueue(e); } 
        } 
       } 
       catch (Exception ex) { 
        Debug.Log(ex.Message); 
       } 
      } 
     } catch (Exception ex) { 
      Debug.Log(ex.Message); 
     } 

    } 

それを行う方法です。

関連する問題