如何仅在 TCPClient 收到脚本后才继续执行脚本?

How to continue with a script only after it was received by a TCPClient?

我考虑向服务器发送一个字节的数据包,并在服务器端编写以下代码:

int a= stream.ReadByte()
if(a==-1){
//client received data 
}

流是 NetworkStream
我想这样做是因为在此之后我在服务器上启动了一个计时器。只有当客户端更新了它们的值时,计时器才会启动。

A Stream 只有有限的选项:

  • 它可以return一个肯定数字说“是的,我提供了这么多数据”
  • 它可以return一个非正数字说“EOF:我没有数据,永远不会有更多数据”
    • (上面的映射也和ReadByte()类似,除了第二点因为没有数据变成“负数”)
  • 可以阻塞,等待以上两个条件之一成为可能
  • 它可以抛出异常

不能做的是说“我目前没有数据,但将来可能会”。因此,您不能使用 Stream API 来检查是否有 数据。相反,通常使用异步 API(通常在 Socket 本身,或不是 Stream 的另一个抽象),以允许您处理回调 数据可用时。 .Socket 上还有 .Available 属性,它告诉您当前缓冲和可供使用的数据量(注意:此 API 通常仅用于在两者之间进行选择同步与异步 IO)。