首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.Net套接字- Socket.Receive报告已读取的字节,但这些字节不会出现在缓冲区中

.Net套接字- Socket.Receive报告已读取的字节,但这些字节不会出现在缓冲区中
EN

Stack Overflow用户
提问于 2022-07-08 20:00:31
回答 2查看 90关注 0票数 0

我给(System.Net.Sockets) Socket.Receive打电话。它返回读取13个字节,这是预期的数据长度。但是,传入函数的接收缓冲区不会被预期的字节填充。缓冲区中的所有字节都为零。

我只是不明白这种情况是如何发生的--我认为在数据可用之前,接收应该被阻塞,并且应该将它读取的数据放入缓冲区。

虽然很简单,但下面是我的代码:

代码语言:javascript
运行
复制
bytesRead = Socket.Receive(RecvBuffer.Buffer, offset, RecvBuffer.Buffer.Length - offset, SocketFlags.None, out SocketError error);

bytesRead = 13,而RecvBuffer.Buffer都是零。

在发送端,据我所知,它不是在写所有的零。我没有找到任何工具让我检查电线上有什么东西。

我不知所措。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-11 14:50:00

这里的问题是派遣方。我被正确工作的其他消息愚弄了,但在这种特殊情况下,发送缓冲区从未填充过数据。因此,没有收到:)。

谢谢你的评论和建议。

票数 0
EN

Stack Overflow用户

发布于 2022-07-09 14:36:42

你必须了解所有可能的情况。在这里,我们将不考虑聊天应用程序,在这里,双方可以同时发送。理解串行通信的最佳方法是应用程序使用秤发送权重。有两种不同的运作模式。一种是连续的,客户端发送消息开始称重,服务器不断发送权重。再说一次,这可能不是你在做的。第二种模式是主从模式,客户端请求一个权重,服务器发送权重。权重可能不会在一个块中出现,因此客户端必须在接收到整个权重之前循环,这通常是结束字符或在权重开始时的字节计数。没有阻塞。Windows使用计时器并定期将UART中的数据发送到应用程序(Socket.Receive)。字节数是随机的,小于或等于正在接收的整个数据。您应该禁用硬件和软件握手,这样才不会获得空数据。您还需要发送一条消息来接收一条消息,直到您收到完整的数据块时才发送,该数据块可能需要多个Socket.Receive()命令,直到您到达数据的末尾为止(一个终止字符或字节计数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72916453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档