问题标签 [beginreceive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
358 浏览

c# - C#:套接字 - 多播,未收到数据,未调用 BeginReceive/BeginReceiveFrom 回调

我实际上很茫然,我有这个问题有一段时间了。我搜索了 Stackoverflow 并找不到解决方案。

问题如下:我没有收到任何数据,并且从未调用来自套接字(多播)的 BeginReceive 或 BeginReceiveFrom 的回调,并且从未处理过数据,我似乎无法找到原因。只见树木不见森林 :(

如果我一步一步调试应用程序,我有时会收到数据,有时不会。如果我在没有断点且没有“逐步”的情况下进行调试,它将永远无法工作。

当我用wireshark 嗅探多播地址时,我可以看到包到达,并且我知道服务器每500ms 发送一次包。

这是 UnitTest 程序和套接字初始化、连接和接收的代码。

也许有人可以帮助我找到错误或指出我正确的方向......

这就是我初始化套接字的方式:

AsyncConnect 工作正常,如下所示:

问题从 BeginReceive 开始,它被调用一次,然后什么也没有发生,回调本身只在套接字关闭时被调用(应该是,已经在这里读过):

我的单元测试程序

0 投票
1 回答
177 浏览

c# - c# Udp BeginReceive - 消息乱序

我目前正在尝试创建一个 UDP 客户端/服务器。这很简单,有一个发送函数,它发送一个字节,然后客户端立即回复一条包含我正在监听的信息的消息

我一直无法接收数据。我一直收到数据,收到的包裹确实有正确的长度,但是消息似乎有问题。

SendAndReceive 函数使用 10 秒计时器。

编辑:如果我每次调用 SendAndReceive 函数时都重新创建 MyUdpClient ,它可以工作并且包的顺序没有错误。

这是我的代码:

常见的输出通常是这样的:

字母代表解码的消息。第一次收到这些消息时,它们是正确的,但是在那之后,消息就变得混乱了。

有任何想法吗?我不确定该采取什么方向。是线程问题还是我必须稍后解码收到的包?

感谢您的任何帮助和/或指导

-安德烈

0 投票
0 回答
145 浏览

.net - 关于循环与递归调用的 Socket.BeginReceive 问题

嗅探 NIC 卡上的 IP 时,Socket.BeginReceive 是否不会自动发出调用以捕获所有传入的 IP 数据包?为什么将它放在一个while(true)循环中会产生更多的结果而不是递归调用它?

我的意思是 BeginReceive 应该是一个异步非阻塞调用,所以调用它一次就足以继续侦听该套接字是吗?

但这似乎不是正确的解释,因为将其放入 while(true) 循环会产生更多结果,然后从回调函数中递归调用它。

而且,如果将其放入 while(true) 循环是有效的,这基本上是轮询该 IP 地址以获取传入请求,那么该方法是否仍有可能丢失一些信息?那么它在硬件层面上没有真正的约束力吗?

例如为什么这样做:

对比

//================================================= =========================更新 //====================== ==================================================== =

通过大量研究和阅读,看起来只有当您期望从特定客户端发出请求并发送到特定客户端时才使用 .BeginReceive 的递归调用。

但是由于 .EndReceive 函数在所有数据进入之前一直处于阻塞状态,所以我真的不确定这是否仍然是正确的方法,并且我相信以这种方式递归实现的任何人都可能会丢失传入的数据,因为 .EndReceive 可能阻塞直到来自原始 .BeginReceive 调用的所有原始消息都完全进入?

我读得越多,看起来 while(true) 方法是更可靠的方法。

真正的 .BeginReceive/.EndReceive 更像是针对特定 IP 地址的异步轮询方案,以获取通过的信息。我不太确定这些方法是否真的阻止了通过 NIC 卡中的特定 IP 传输消息,因为看起来这些方法可能只是“监听”该特定 IP 和端口。

有任何网络大师想参与进来吗?

谢谢!

0 投票
1 回答
284 浏览

c# - 如何在异步套接字中接收完整的屏幕截图?

我有一个android将数据(图像或文本)发送到C#应用程序的 Java 代码,以接收我使用异步套接字的这些数据。但是存在一个与BeginReceive()功能相关的问题是在发送图像时没有接收到完整的数据。那么我如何制作一种“循环”来接收完整的数据并在Picturebox上显示图像后(例如)?

形式

听众

客户


安卓代码


我总是在此行中收到错误Invalid Parameter

并且使用压缩在这里也会发生同样的情况

无效数据异常

分别在ServerReceivedImage()方法上。

使用这个

我注意到只接收 15KB(不使用压缩的文件大小)。

0 投票
0 回答
297 浏览

c# - Socket 异常 0x80004005 偶尔断开连接

在使用我编写的 TCP 服务器接收数据时,我遇到了随机出现神秘错误的问题。例外情况如下:

我正在使用 BeginXXX 和 EndXXX 异步方法,对方肯定没有关闭连接。

负责接受连接的代码:

以及负责接收消息的代码:

有时,服务器和客户端都报告完全相同的问题,有时,它只是服务器或客户端。同样有趣的是,当服务器接受连接时,我可以在日志中看到实际上有两个连接请求,都被接受了。不知道这是否与它有关......只是一个侧面说明,服务器和客户端都在同一台机器上运行,这是一个 MS Azure VM。如果需要,我还可以附上服务器的整个代码。

谢谢!