当前位置:  开发笔记 > 编程语言 > 正文

StreamReader.ReadLine和CR

如何解决《StreamReader.ReadLine和CR》经验,为你挑选了1个好方法。

我在这里很密集吗?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它会按预期返回.

文档是错误的,还是我搞砸了什么......?



1> Jon Skeet..:

ReadLine正在等着看下一个角色是什么.如果它是换行符,它想要吞下它.如果你给作家写任何其他字符,那也会使它返回该行.

这是对线路终结器的历史混淆的一个不幸的必然结果.TextReader记住它需要潜在地吞下它读取的下一个字符(并立即返回该行)可能更有意义,但这就是生命.


至少,文档应该更加关于这个怪癖.
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有