Witam
Jest sobie prosty serwer i jeszcze prostszy klient. Klient wysyła informację do serwera, ten ma zamienić litery na duże i odesłać.
Nie mogę zrozumieć dlaczego nie może odesłać korzystając z tego samego bufora, którym przyszły dane (bytesRead). (wtedy nic nie odsyła do klienta).
Dlaczego tylko trzeci sposób implementacji w serwerze działa poprawnie
KLIENT
Console.WriteLine("Type 'exit' to exit");
while (true)
{
Console.Write("SEND: ");
buffer = encoder.GetBytes(Console.ReadLine());
if (encoder.GetString(buffer) == "exit")
{
break;
}
Console.WriteLine("SENDING: " + encoder.GetString(buffer));
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Read(buffer, 0, buffer.Length);
Console.WriteLine("REPLY: " + encoder.GetString(buffer));
}
SERWER
while (true)
{
bytesRead = 0;
try
{
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
break;
}
if (bytesRead == 0)
{
break;
}
Console.WriteLine("RECEIVED: " + encoder.GetString(message, 0, bytesRead));
//REPLY
// 1
/*sMessage = encoder.GetString(message, 0, bytesRead);
sMessage = sMessage.ToUpper();
Console.WriteLine("REPLY: " + sMessage);
message = encoder.GetBytes(sMessage);
Console.WriteLine("REPLY: " + encoder.GetString(message, 0, bytesRead));
clientStream.Write(message, 0, bytesRead);*/
//2
/*message = encoder.GetBytes(encoder.GetString(message,0,bytesRead).ToUpper());
Console.WriteLine("REPLY: " + encoder.GetString(message, 0, bytesRead));
clientStream.Write(message, 0, bytesRead);*/
//3
byte[] buffer = encoder.GetBytes(encoder.GetString(message, 0, bytesRead).ToUpper());
clientStream.Write(buffer, 0, buffer.Length);
Console.WriteLine("REPLY: " + encoder.GetString(buffer, 0, buffer.Length));
}