Hallo kann mir jemand sagen ob diese aussagen so stimmen.:
Also ich habe ein Client/Server Paar.Der Server empfängt vom Client eine Zeile und schreibt dann irgendwas zurück.
Also macht der client
server = TcpListener(4296);
TcpClient c = server..AcceptTcpClient();
StreamReader r = new StreamReader( c.GetStream());
String s =r.readLine();
//machwas
// irgendwas zurückschicken.
1.r.readLine() blockiert doch bis Daten verfügbar sind?
3.Wie ist den readline intern programmiert? Macht der immer read(ein paar bytes puffern) , schauen ob /n vorkommt, wenn nciht dann wieder ein read(), und falls read() längere Zeit blockiert macht er ein Timeout?
Bin dankbar um aufklärung 😃
Abend,
hab dir den code aus dem refvlector kopiert, damit sollte klar sein wie diue methode aufgebaut ist 😉
public override string ReadLine()
{
if (this.stream == null)
{
__Error.ReaderClosed();
}
if ((this.charPos == this.charLen) && (this.ReadBuffer() == 0))
{
return null;
}
StringBuilder builder = null;
do
{
int charPos = this.charPos;
do
{
char ch = this.charBuffer[charPos];
switch (ch)
{
case '\r':
case '\n':
string str;
if (builder != null)
{
builder.Append(this.charBuffer, this.charPos, charPos - this.charPos);
str = builder.ToString();
}
else
{
str = new string(this.charBuffer, this.charPos, charPos - this.charPos);
}
this.charPos = charPos + 1;
if (((ch == '\r') && ((this.charPos < this.charLen) || (this.ReadBuffer() > 0))) && (this.charBuffer[this.charPos] == '\n'))
{
this.charPos++;
}
return str;
}
charPos++;
}
while (charPos < this.charLen);
charPos = this.charLen - this.charPos;
if (builder == null)
{
builder = new StringBuilder(charPos + 80);
}
builder.Append(this.charBuffer, this.charPos, charPos);
}
while (this.ReadBuffer() > 0);
return builder.ToString();
}
mfg