You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现TCPClient成功接收数据后才继续执行后续脚本?

正确实现TCP客户端接收确认的方案

现有逻辑的核心问题

你当前的思路存在根本误区:NetworkStream.ReadByte()返回-1的触发条件是TCP连接对端已经主动关闭了写入通道(调用了Shutdown(SocketShutdown.Send)或直接关闭连接),完全不能代表客户端已经成功接收数据,这套逻辑无法实现你要的确认效果。

可行实现方案

你需要在TCP层之上自定义应用层确认逻辑,具体步骤如下:

  • 服务端先向客户端发送需要更新的数值数据
  • 客户端收到数据、完成本地数值更新操作后,主动向服务端发送提前约定好的单字节确认数据包(比如固定发送0x01作为更新完成标识)
  • 服务端发送完数据后,阻塞等待读取客户端发回的确认字节:
// 服务端示例代码
// 先向客户端发送更新数据
stream.Write(updateData, 0, updateData.Length);

// 阻塞等待客户端返回确认信息
int confirmByte = stream.ReadByte();
if (confirmByte == 0x01) // 匹配提前约定的确认标识
{
    // 确认客户端已完成更新,启动计时器
    StartYourTimer();
}
  • 对应客户端的处理逻辑:
// 客户端示例代码
// 读取服务端发送的更新数据
stream.Read(receiveBuffer, 0, receiveBuffer.Length);
// 执行本地数值更新逻辑
DoValueUpdate(receiveBuffer);
// 向服务端发送确认字节
stream.WriteByte(0x01);
// 执行后续本地脚本
RunNextScript();

注意事项

  • 提前约定确认用的字节值,避免和业务数据冲突,也可以约定更长的确认报文降低误判概率
  • 如果担心丢包或超时,可以给服务端的读取操作添加超时判断,超时后可重试发送数据或走异常处理流程

内容的提问来源于stack exchange,提问作者itsme11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:48:03