2016-11-29 2 views
-2


Ich bin neu in C# und ich habe ein Problem mit quadratischen weißen Zeichen in Textfeld in C#. (siehe Screenshot unten)
Ich habe Client-Server-Programm für das Chatten implementiert, das von System.Net.Sockets. unterstützt wird. Innerhalb jedes Programms ist byte[] array= new byte[10025], die nie ganz voll ist, aber Textfeld leere Zeichen zeigt innen. Kannst du mir beim Löschen dieser Charaktere helfen?
Vielen Dank!

Blank white character squaresWeißes Zeichen C# Textfeld

liest Code der Client-Seite:
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

Wenn Sie von einem Socket lesen, die Rückkehr aus der 'Read' Methode werden Sie lesen eine ganze Zahl, welche die Anzahl von Bytes sein. Sie * müssen * diese Zahl respektieren - der Rest der Zeichen in 'array' wird unbrauchbar sein. Wenn Sie den Post mit Ihrem Socket-Lesecode aktualisieren, können wir Ihnen den passenden Fix vorschlagen (aber im Grunde ist es "Nehmen Sie nur die richtige Anzahl an Zeichen aus dem Array") –

+1

Sie haben ein Problem mit der Codierung Wenn Sie eine Textbox verwenden ersetzen Sie mit RichTextBox.Wenn Sie einen beliebigen Stream verwenden, stellen Sie sicher, dass die Codierung UTF8 ist.Der Standardwert ist ASCII, der nicht druckbare Zeichen ändert.Sie ​​können auch Unicode-Zeichen verwenden, die möglicherweise Unicode (nicht UTF8) verwenden.A – jdweng

+0

können Sie den Code von Ihre Kommunikationsprozedur? –

Antwort

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

Vielen Dank noch einmal! Jetzt verstehe ich und alles funktioniert perfekt. – ZPA

0

Sie unter Code auf Textbox verwenden können, um zu überprüfen, ob der Leerraum ist.

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

Räume zu beseitigen

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