C#从网络流中读取而不使用结束字符

C#从网络流中读取而不使用结束字符,c#,networking,networkstream,C#,Networking,Networkstream,我正在尝试从网络流中读取一行,该网络流的末尾现在有行返回。 这一行可以是任何内容,但始终以不返回行结束 目前我正在做 string line4 = sr.readline(); 但这只是暂停了我的代码,即使我已经给了它我想要它阅读的一切 有没有办法在不使用返回字符的情况下读取最后一行?您需要检查stream.DataAvailable是否可用或设置读取超时。StreamReader将重复前进bufferLength字节,直到找到一个\r\n(或0x10 0x13),然后它将返回到该点的所有内容

我正在尝试从网络流中读取一行,该网络流的末尾现在有行返回。 这一行可以是任何内容,但始终以不返回行结束

目前我正在做

string line4 = sr.readline();
但这只是暂停了我的代码,即使我已经给了它我想要它阅读的一切


有没有办法在不使用返回字符的情况下读取最后一行?

您需要检查stream.DataAvailable是否可用或设置读取超时。StreamReader将重复前进
bufferLength
字节,直到找到一个\r\n(或0x10 0x13),然后它将返回到该点的所有内容,并开始缓存下一个“行”。如果没有可用的数据,或者StreamReader检测到我们到达了流的末尾,那么它将返回null。因此,检查行是否为null是检查流是否结束的一种确定方法。但实际上,这在很大程度上取决于您在该流上使用的是哪种协议。不要将时间浪费在
DataAvailable
上。您应该使用异步I/O,这意味着只要没有数据,就不会阻止任何内容。至于缺少的端点(CR、LF或CR/LF…无论什么),如果您不想关闭该端点的连接,发送方必须提供端点。但是,如果他们完成了发送,那么他们应该调用
Socket.Shutdown(SocketShutdown.Send)
来指示他们完成了发送。然后,
StreamReader.ReadLine()
将正常终止(即返回
null
以指示在返回最后一行无尾行后流的结束)。来自@fetype的此注释是错误的:“如果没有可用数据…则返回null”。这种情况只发生在流程的末尾。如果数据根本不可用,则
StreamReader
阻塞。当然,除非您使用异步读取(例如,
ReadLineAsync()
),否则在这种情况下,它将返回未完成状态下的等待。谢谢大家,现在就把它整理好。干杯