2017-01-23 3 views
0

Ich versuche, Daten zwischen einem Client und einem Server in C# zu senden. Ich bin ziemlich neu dazu. Ich führe diese auf dem gleichen Rechner aus, daher localhost.C# Server Client scheint nur in eine Richtung zu funktionieren

Der Server kann Daten vom Client empfangen, aber der Client scheint nie die Antwort von ja zu erhalten, obwohl er gesendet wurde.

Client: Der Client sendet Daten ("Apple") an den Server und sollte eine Antwort erhalten.

 TcpClient client = new TcpClient("localhost", 1334); //Currently localhost 
     StreamReader sr = new StreamReader(client.GetStream()); 
     StreamWriter sw = new StreamWriter(client.GetStream()); 

     string sendData = "apple"; 
     sw.WriteLine(sendData); 
     sw.Flush(); 

     string data = sr.ReadLine(); 

     if (data != null) 
     { 
     MessageBox.Show("It worked!"); 
     } 
     else 
     { 
      MessageBox.Show("No data."); 
     } 


     client.Close(); 

Server: Der Server für die Daten hören. Wenn es Daten empfängt, prüft es, ob es Apfel ist und antwortet dann "Ja".

Alle Hilfe wird geschätzt.

+0

Ich sehe zwei Dinge: fügen Sie einen 'sw.Flush()' auf der Server-Seite vor 'client.Close();', und da Sie haven‘ t hat den ganzen Code gepostet, es ist unklar, ob der Client auf die Antwort wartet, afaik 'ReadLine()' ist ein nicht blockierender Aufruf - er wird fortgesetzt, wenn der Server nicht rechtzeitig reagiert hat. – Furmek

+0

@Furmek "fügen Sie eine sw.Flush() auf der Server-Seite vor dem client.Close();" Das war's! Vielen Dank! –

Antwort

0

Furmek kommentiert:

Ich sehe zwei Dinge: Zum Hinzufügen eines sw.Flush(); auf der Serverseite vor client.Close();

Arbeits Server-Code

TcpListener listener = new TcpListener(1334); 
    listener.Start(); 

    while (true) 
    { 
     TcpClient client = listener.AcceptTcpClient(); 
     StreamReader sr = new StreamReader(client.GetStream()); 
     StreamWriter sw = new StreamWriter(client.GetStream()); 

     string request = sr.ReadLine(); 

     if(request == "apple") 
     { 
      Console.WriteLine(request); // Print that to the console so we know it was received okay 
      sw.WriteLine("yes\n"); 
      sw.Flush(); // sw.Flush(); Added here!! 
      client.Close(); 
     } 
Verwandte Themen