我给(System.Net.Sockets) Socket.Receive打电话。它返回读取13个字节,这是预期的数据长度。但是,传入函数的接收缓冲区不会被预期的字节填充。缓冲区中的所有字节都为零。
我只是不明白这种情况是如何发生的--我认为在数据可用之前,接收应该被阻塞,并且应该将它读取的数据放入缓冲区。
虽然很简单,但下面是我的代码:
bytesRead = Socket.Receive(RecvBuffer.Buffer, offset, RecvBuffer.Buffer.Length - offset, SocketFlags.None, out SocketError error);bytesRead = 13,而RecvBuffer.Buffer都是零。
在发送端,据我所知,它不是在写所有的零。我没有找到任何工具让我检查电线上有什么东西。
我不知所措。任何帮助都是非常感谢的。
发布于 2022-07-11 14:50:00
这里的问题是派遣方。我被正确工作的其他消息愚弄了,但在这种特殊情况下,发送缓冲区从未填充过数据。因此,没有收到:)。
谢谢你的评论和建议。
发布于 2022-07-09 14:36:42
你必须了解所有可能的情况。在这里,我们将不考虑聊天应用程序,在这里,双方可以同时发送。理解串行通信的最佳方法是应用程序使用秤发送权重。有两种不同的运作模式。一种是连续的,客户端发送消息开始称重,服务器不断发送权重。再说一次,这可能不是你在做的。第二种模式是主从模式,客户端请求一个权重,服务器发送权重。权重可能不会在一个块中出现,因此客户端必须在接收到整个权重之前循环,这通常是结束字符或在权重开始时的字节计数。没有阻塞。Windows使用计时器并定期将UART中的数据发送到应用程序(Socket.Receive)。字节数是随机的,小于或等于正在接收的整个数据。您应该禁用硬件和软件握手,这样才不会获得空数据。您还需要发送一条消息来接收一条消息,直到您收到完整的数据块时才发送,该数据块可能需要多个Socket.Receive()命令,直到您到达数据的末尾为止(一个终止字符或字节计数)。
https://stackoverflow.com/questions/72916453
复制相似问题