Я пытаюсь отправить данные между клиентом и сервером на 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();
}
Вся помощь приветствуется.
Я вижу две вещи: добавить 'sw.Flush()' на стороне сервера, прежде чем 'client.Close();', и так как вы убежище» t отправил весь код, пока неясно, ожидает ли клиент ответ, afaik 'ReadLine()' является неблокирующим вызовом - он будет продолжаться, если сервер не ответит вовремя. – Furmek
@Furmek "добавить sw.Flush() на стороне сервера перед клиентом.Close();" Вот и все! Спасибо! –