为何此PowerShell TCP流读取循环无法终止?
问题原因解析
首先得搞懂$stream.Read()方法的返回值到底代表什么:它返回的是本次调用实际读取到的字节数量,不是读取到的字节内容。
- 当你发送
0字符时,这个字符会被转换成1个字节(比如ASCII编码下是0x30),Read()会成功读取这1个字节,返回值是1,自然不等于0,循环会继续运行。 - 当你发送空字符串
""时,实际上没有任何字节被发送到套接字流里。对于TCP流来说,Read()方法在没有数据可读时会一直阻塞等待,直到有数据过来或者连接被关闭,所以此时它不会返回0,循环也不会终止。
只有当发送端主动关闭了套接字的输出流(比如调用了套接字的Close()方法,或者Shutdown(Send)操作),接收端的Read()方法才会返回0,表示流已经结束,没有更多数据可以读取,这时候循环才会终止。
内容的提问来源于stack exchange,提问作者TMOTTM
相关产品推荐
相关产品推荐

