我在这里密集吗? 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
即使发送了CR,服务器也不会从ReadLine
返回,直到断开连接。如果我更改为vbLF
或vbCRLF
,它将按预期返回。
文档是错误的,还是我在这里搞砸了什么......?
答案 0 :(得分:12)
ReadLine
正等着看下一个角色是什么。如果它是换行符,它想要吞下它。如果你写任何其他字符给作家,那也会使它返回该行。
这是对线路终结器的历史混淆的一个不幸的必然结果。 TextReader
要记住它需要潜在地吞下它读取的下一个字符(并立即返回该行),这可能更有意义了,但这就是生命。