2015-09-30 3 views
0

у меня есть питон скручены сервер TCP, который я передавать данные с этим кодом:питон скручены сервер с C# клиента

self.transport.write("true") 

он передает строку «истина».

и я планирую получить его в мой клиент C# с этим кодом:

byte[] rba = new byte[tcpclnt.ReceiveBufferSize]; 
stm.Read (rba, 0, (int)tcpclnt.ReceiveBufferSize); 

я и попытался UTF8 и по умолчанию (ASCII) закодировать, чтобы преобразовать его в строку:

string returndata = Encoding.UTF8.GetString (rba); 

и

string returndata = Encoding.Default.GetString (rba); 

и пытался это сделать:

if (returndata == "true") 
    do something 

но он не равен returndata для «true», и я понятия не имею, почему?

Может ли кто-нибудь помочь мне это понять?

+0

http://stackoverflow.com/help/ mcve. Пожалуйста, покажите нам, что эти попытки _did_ возвращаются. Кроме того, было бы полезно распечатать коды ASCII байтов, которые вы получили. – Prune

+0

, который означает, что? но я могу сказать u, когда я печатаю returndata в консоли, он показывает мне «true» (оба ascii и utf8). –

ответ

0
byte[] rba = new byte[tcpclnt.ReceiveBufferSize]; 
var len=stm.Read (rba, 0, (int)tcpclnt.ReceiveBufferSize); 
string returndata = Encoding.UTF8.GetString (rba,len); 

Вы декодируете весь буфер, а не только 4 байта, которые вы получили. stm.Read должен вернуть 4, который затем можно использовать в GetString сказать ему, чтобы остановить после 4

В качестве альтернативы, вы можете, вероятно, сделать это тоже:

var returndata = stm.ReadToEnd(); 
+0

Да, проблема в том, что мне нужны 4 байта, поэтому я изменил tcpclnt.ReceiveBufferSize на 4. –