2017-01-23 4 views
0

Я пытаюсь отправить данные между клиентом и сервером на C#. Я довольно новичок в этом. Я запускаю их на одной машине, поэтому localhost.Клиент C# Server, похоже, работает только в одном направлении

Сервер может получать данные от клиента, но клиент никогда не получает ответ «да», даже если он отправлен.

Клиент: Клиент отправляет данные («яблоко») на сервер и должен получать ответ.

 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(); 

Сервер: Сервер прослушивает данных. Когда он получает данные, он проверяет, является ли это яблоком, а затем отвечает «Да».

 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"); 
       client.Close(); 
      } 

Вся помощь приветствуется.

+0

Я вижу две вещи: добавить 'sw.Flush()' на стороне сервера, прежде чем 'client.Close();', и так как вы убежище» t отправил весь код, пока неясно, ожидает ли клиент ответ, afaik 'ReadLine()' является неблокирующим вызовом - он будет продолжаться, если сервер не ответит вовремя. – Furmek

+0

@Furmek "добавить sw.Flush() на стороне сервера перед клиентом.Close();" Вот и все! Спасибо! –

ответ

0

Furmek прокомментировал:

Я вижу две вещи: добавить sw.Flush(); на стороне сервера до client.Close();

Рабочий сервер Код

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(); 
     } 
Смежные вопросы