我在这里很密集吗?StreamReader.ReadLine声明:
一行被定义为一个字符序列,后跟一个换行符("\n"),一个回车符("\ r")或一个回车符后面紧跟一个换行符("\ r \n")
那么,为什么这不能按预期工作呢?
' Server Dim tcpL as New TcpListener(IPAddress.Any, 5000) tcpL.Start(1) Using tcpC as TcpClient = tcpL.AcceptTcpClient(), _ s as NetworkStream = tcpC.GetStream(), _ sr as New StreamReader(s, System.Text.Encoding.ASCII, True) Dim message As String = sr.ReadLine() Console.WriteLine(message) End Using Console.ReadLine() ' Client Using tcpC as New TcpClient() tcpC.Connect(IPAddress.Loopback, 5000) Using s as NetworkStream = tcpC.GetStream(), _ sw as New StreamWriter(s, System.Text.Encoding.ASCII) sw.AutoFlush = True sw.Write("Hello there!") sw.Write(vbCR) ' Note the CR terminator Console.ReadLine() End Using End Using
ReadLine
即使发送了CR ,服务器也不会在断开连接之前返回.如果我改为a vbLF
,或者vbCRLF
它会按预期返回.
文档是错误的,还是我搞砸了什么......?
ReadLine
正在等着看下一个角色是什么.如果它是换行符,它想要吞下它.如果你给作家写任何其他字符,那也会使它返回该行.
这是对线路终结器的历史混淆的一个不幸的必然结果.TextReader
记住它需要潜在地吞下它读取的下一个字符(并立即返回该行)可能更有意义,但这就是生命.