2016-11-29 5 views
-2


Я новичок в C#, и у меня проблема с квадратными белыми символами в текстовом поле на C#. (см. снимок экрана ниже)
Я реализовал клиент-серверную программу для общения, поддерживаемую System.Net.Sockets.. Внутри каждой программы byte[] array= new byte[10025], которая никогда не бывает полностью заполнена, но в текстовом поле отображаются пустые символы внутри. Можете ли вы помочь мне с удалением этих персонажей?
Спасибо!

Blank white character squaresБелый символ C# текстовое поле

Читать код стороны клиента:
http://pastebin.com/W3Pc3BPG

 try 
     { 
      while (true) 
      { 
       serverStream = clientSocket.GetStream(); 
       int buffSize = 0; 
       byte[] inStream = new byte[10025]; 
       buffSize = clientSocket.ReceiveBufferSize; 
       serverStream.Read(inStream, 0, inStream.Length); 
       string returndata = System.Text.Encoding.UTF8.GetString(inStream); 
       readData = "" + returndata; 
       msg(); 
      } 
     } catch(Exception e) 
     { 
      ctThread.Join(); 
     } 
+4

При чтении из сокета, возвращение из 'метода Read' будет целое число, содержащее число байтов, которые вы читаете. Вы * должны * уважать это число - остальные символы в 'array' будут мусором. Если вы обновите сообщение с помощью кода чтения сокета, мы можем предложить подходящее исправление (но в основном это «Только взять правильное количество символов из« массива ») –

+1

У вас проблема с кодировкой. Если вы используете замену текстового поля на RichTextBox. Если вы используете какой-либо поток, убедитесь, что кодировка UTF8. По умолчанию используется ASCII, который изменит символы, не пригодные для печати. ​​Также могут быть символы Unicode, которые могут понадобиться использовать Unicode (не UTF8). – jdweng

+0

вы можете опубликовать код ваша коммуникационная процедура? –

ответ

2
serverStream = clientSocket.GetStream(); 
int buffSize = 0; 
byte[] inStream = new byte[10025]; 
buffSize = clientSocket.ReceiveBufferSize; 
// Make sure you respect the number of bytes that have been read. 
// Note that the below code is not the most performant - it's just 
// to demonstrate the technique. 
int bytesRead = serverStream.Read(inStream, 0, inStream.Length); 
byte[] theData = inStream.Take(bytesRead).ToArray(); 
string returndata = System.Text.Encoding.UTF8.GetString(theData); 
readData = "" + returndata; 
msg(); 
+0

Еще раз спасибо! Теперь я понимаю, и все работает отлично. – ZPA

0

Вы можете использовать ниже код на текстовом поле, чтобы проверить, что это белое пространство.

bool hasAllWhitespace = txtBox1.Text.Length>0 && 
         txtBox1.Text.Trim().Length==0; 

Для устранения пробелов

if (hasAllwhitespace) 
{ 
    txtBox1.Text.Trim(); 
}