首页 > 解决方案 > 仅在 TCPClient 接收到脚本后如何继续执行脚本?

问题描述

我想过向服务器发送一个带有一个字节的数据包,并在服务器端写入以下代码:

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

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

标签: c#tcp

解决方案


AStream只有有限的选项:

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

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


推荐阅读