2009-03-24 8 views
0

ich einen grundlegenden Socket-Server habe, der wie folgt aussieht:von Sockel, bis Client Lese sendet EOL in C#

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8000); 
    Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
    try 
    { 
     newsock.Bind(localEndPoint); 
    } 
    catch (Exception e) 
    { 
     //Errors handled 
    } 
    newsock.Listen(10); 
    Console.WriteLine("Bound to port 8000"); 
    Socket client = newsock.Accept(); 
    while (client.Connected) 
    { 
     Console.WriteLine("Connection recieved."); 
     string outputString = null; 
     byte[] buffer = new byte[4]; 
     client.Receive(buffer); 
     string bit = null; 
     while (bit != "\r\n" || bit != "\n" || bit != "\r") 
     { 
      bit = Encoding.ASCII.GetString(buffer); 
      outputString += bit; 
     } 
     Console.WriteLine(outputString); 
    } 

Ich will es jetzt eingegeben werden, bis der Benutzer (derzeit telnet) akzeptieren sendet einen EOL (Pressen Enter) der Code oben ist meistens was ich bisher versucht habe, wie soll ich das machen?

+0

Gibt es einen Grund, keinen TcpListener/TcpClient zu verwenden? Das würde es viel einfacher machen, StreamReader.ReadLine() zu verwenden ... –

Antwort

1

Nun, funktioniert TCP in Strömen, so, um etwas zu erkennen, werden Sie den Fall haben, zu antizipieren dass a \ r \ n ist nicht das einzige Ding, das in deinem Puffer ist.

ersetzen

bit != "\r\n" || bit != "\n" || bit != "\r" 

mit

!bit.Contains("\r") && !bit.Contains("\n") 

nicht mit Daten aus dem TCPStream ... Bedeutung in

while (bit != "\r\n" || bit != "\n" || bit != "\r") 
    { 
     bit = Encoding.ASCII.GetString(buffer); 
     outputString += bit; 
    } 

Sie brauchen

wieder zu bevölkern 'Bit' Vergessen
client.Receive(buffer); 

so sieht es aus wie:

while (bit != "\r\n" || bit != "\n" || bit != "\r") 
    { 
     bit = Encoding.ASCII.GetString(buffer); 
     outputString += bit; 
     client.Receive(buffer); 
    } 

Und ... eine Exception-Handler Sie, wenn der Client die Verbindung trennt wissen lassen.

+0

Einiges von dem, was Sie erwähnt haben, wurde erledigt und nur nicht gepostet. Aber das hat genauso funktioniert wie erwartet. – UnkwnTech

0

Sie sind wahrscheinlich mehr als ein Zeichen bekommen, wenn das EOL-Zeichen Versuch gesendet wird:

while (bit != null && !bit.EndsWith("\r") && !bit.EndsWith("\n"))