Code:
NetworkStream stream = new NetworkStream(socket);
StreamReader reader = new StreamReader(stream);
BinaryFormatter formatter = new BinaryFormatter();
StreamWriter writer = new StreamWriter(stream);
string msg = reader.ReadLine();
while (msg != "END")
{
switch (msg)
{
case "WRITE":
{
Write();
break;
}
case "RETURN":
{
ReturnRecord();
break;
}
case "FIND":
{
FindRecord();
break;
}
default:
break;
}
if (stream.DataAvailable)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
}
NetworkStream stream = new NetworkStream(socket);
StreamReader reader = new StreamReader(stream);
BinaryFormatter formatter = new BinaryFormatter();
StreamWriter writer = new StreamWriter(stream);
string msg = reader.ReadLine();
while (msg != "END")
{
switch (msg)
{
case "WRITE":
{
Write();
break;
}
case "RETURN":
{
ReturnRecord();
break;
}
case "FIND":
{
FindRecord();
break;
}
default:
break;
}
if (stream.DataAvailable)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
}
E sad, umesto sledećeg dela code-a:
Code:
if (stream.DataAvailable)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
if (stream.DataAvailable)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
pokušao sam na još par načina, između ostalog i sa:
Code:
if (reader.Peek() != -1)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
if (reader.Peek() != -1)
{
msg = reader.ReadLine();
}
else
{
msg = "";
}
Dakle, bitno mi je da u samoj petlji ne dodje do blokiranja pri pozivu Readline metode. Kod mene pri korišćenju nekog od prethodnih načina program upada u beskonačnu petlju jer reader.Peek() uvek vraća -1, iako su podaci sa klijenta poslati. Slično se dešava i korišćenjem stream.DataAvailable. U funkcijama Write(), ReturnRecord() i FindRecord() koristim BinaryFormatter za deserijalizaciju sa streama, i izgleda da zbog toga dolazi do problema, jer čim se program vrati iz neke od tih funkcija (gde je vršio deserijalizaciju na streamu) reader.Peek uvek vraća -1 iako su podaci sa klijenta poslati.
Ako uklonim iz programa uslov if(reader.Peek != -1), program radi kako treba, ali dolazi do blokiranja u petlji koje želim da izbegnem. Nije mi jasno zašto se Peek() pogubi nakon korišćenja deserijalizacije.
Jel ima neko ideju kako bih ovo mogao da rešim?