2017-02-09 2 views
0

У меня установлено соединение с websocket, я хочу получать от него сообщение. Ниже приведен мой код для получения сообщения от websocket.Использование TcpClient для получения данных в websocket get 0 0 0 0

//mClient is my TCP connection 
byte[] bytes; 
NetworkStream netStream;    
string returndata; 
while(true) 
{ 
bytes = new byte[mClient.ReceiveBufferSize]; 
netStream = mClient.GetStream(); 
netStream.Read(bytes, 0, (int)mClient.ReceiveBufferSize);    
returndata = Encoding.UTF8.GetString(bytes); 
Console.WriteLine("This is what the host returned to you: " + returndata); 
} 

Данные должны быть некоторые JSON массив, когда я открываю с браузером, но у меня есть получить странные данные, как

??\0\0\0\0\0\0\0\0\0\0\ 

И второй цикл, начиная навсегда

\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0

Я видел Similar Question, но Я не знаю его ответа. Могу ли я узнать, как исправить эту проблему и в чем проблема?

ответ

0

Просто читать поток с StreamReader вместо теребя буфера массива и кодирования сам:

//mClient is my TCP connection 
StringBuilder returndata = new StringBuilder(); 
Console.Write("This is what the host returned to you: "); 
// the StreamReader handles the encoding for you 
using(var sr = new StreamReader(mClient.GetStream(), Encoding.UTF8)) 
{ 
    int value = sr.Read(); // read an int 
    while(value != -1)  // -1 means, we're done 
    { 
     var ch = (char) value; // cast the int to a char 
     Console.Write(ch);  // print it 
     returndata.Append(ch); // keep it 
     value = sr.Read();  // read next char 
    } 
} 
Console.WriteLine(" done."); 

захвата результат в StringBuilder, так что вы можете преобразовать его в строку, если концы петли (на основе при любом условии, которое будет)

0

Это не будет работать так. WebSockets использует протокол кадрирования, который необходимо проанализировать. Ваша полезная нагрузка JSON будет обернута в один или несколько кадров, которые вам нужно прочитать и проанализировать.

https://tools.ietf.org/html/rfc6455#section-5.2

Смежные вопросы