- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个线程等待来自多个接口(interface)的 UDP 消息,使用 UdpClient::BeginReceive
和调用 UdpClient::EndReceive
的回调拾取数据并将其传递。
如果 5 秒后我没有得到任何东西,我会从调用 UdpClient::BeginReceive
的函数返回以便可以取消该过程并发出另一个广播,该广播将触发外部客户端发送 UDP 响应。如果我们不取消,我会调用 UdpClient::BeginReceive
再次运行以检查新数据。
如果客户端没有及时收到任何数据,有没有办法在不调用 EndReceive
的情况下取消该异步请求哪个无限期地阻塞?我的印象是让数百个异步触发器运行是个坏主意。
最佳答案
您需要猛拉地板垫,调用 UdpClient.Close() 方法。
这将完成 BeginReceive() 调用,并且您的回调方法将运行。当您调用 EndReceive() 时,该类会告知您地垫已消失,并将引发 ObjectDisposedException。所以准备好处理这个异常,用 try/catch 包装 EndReceive() 调用,这样你就可以捕获 ODE 并退出回调方法。
请注意,这往往会让 .NET 程序员有点不高兴,通常强烈建议不要使用异常进行流控制。但是,您必须调用 EndInvoke(),即使您已经知道这会引发异常。不这样做会导致资源泄漏,可能会持续一段时间。
关于.net - 你如何 'cancel' 一个 UdpClient::BeginReceive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18309974/
当然,如果没有数据,BeginReceive() 将永远不会结束。MSDN suggests调用 Close() 会中止 BeginReceive()。 但是,在套接字上调用 Close() 也会对其
我用BeginReceive()方法监听特定的端口。 如何找到发件人的IP? 谢谢你。 最佳答案 我认为您应该详细说明您的问题。 无论如何,您都可以在清晰而详细的"Asynchronous Serve
我有一个用 C# 编写的简单异步套接字服务器(几乎是 Microsoft 的 example ),但是这个示例的问题是它只接受来自客户端的一条消息,然后关闭。我希望此服务器在收到任何消息后保持事件状态
据说 BeginReceive 和 BeginSend 回调不会在 .Net ThreadPool 上执行,而是在 上执行IOCP 线程池。对于高性能服务器,IOCP 线程尽快返回池至关重要,这意味着
基本上我已经建立了套接字连接。这是我的 WaitData 方法: public void WaitForData() { State state = new State
当读取未完成时,读取缓冲区有问题。 如果接收到的 XML 数据是有效的,那么我没有问题。但是,当接收到的 XML 数据不正确时,我正在等待数据的第二部分,然后出现错误。 我的代码如下: int cur
如果客户端通过同一个套接字向服务器发送多条消息,服务器端的 EndReceive 是否会将消息分开,或者服务器是否有可能在单个 BeginReceive 中接收来自两个单独发送的部分消息? 最佳答案
我目前有一个后台线程。在这个线程中是一个无限循环。 这个循环偶尔更新数据库中的一些值,然后在 MessageQueue 上监听 1 秒(使用 queue.Receive(TimeSpan.FromSe
要从套接字异步接收数据,.Net 支持对称的 BeginReceive/EndReceive 调用。基本上你调用BeginReceive()开始监听并确定数据到达时应调用的回调。在回调中调用 EndR
我想做这个 for (int i = 0; i 0 以确定在执行 UdpClient.Receive() 之前是否有任何 UDP 请求排队- 这完全消除了阻塞方面。我确实建议您谨慎尝试此操作,因为此
Socket.BeginReceive/EndReceive 函数的调用顺序是什么? 例如,我两次调用 BeginReceive,一次是为了获取消息长度,第二次是为了获取消息本身。现在的场景是这样的,
在 F# 中使用原始套接字编写异步 Ping,以使用尽可能少的线程启用并行请求。不使用“System.Net.NetworkInformation.Ping”,因为它似乎为每个请求分配一个线程。我也对
我需要接收异步消息。 在所有消息中,前 2 个字节表示下一个字节数组的长度。我的问题是在少数情况下我会收到意外的数据包。 如果我使用 Thread.Sleep(200)这个问题不会发生,或者很少发生。
首先让我说这与 UDP 作为协议(protocol)的可靠性无关。我知道数据包可能会被丢弃、乱序到达等。另外,严格来说,这不是数据速率的问题(我不是试图每秒处理太多的数据包),也不是数据量的问题数据(
我正在使用 UDPClient 发送多播请求并接收来自网络上各种客户端的响应。我能够发送请求并得到响应,但是我得到的响应非常慢。需要 2-3 分钟才能得到所有客户端的响应。在我检查 WireShark
问题: 当我做这样的事情时: for (int i = 0; i < 100; i++) { SendMessage( sometSocket, i.ToString()); Thre
嗨堆栈溢出成员。我正在努力处理一些简单的代码,但无法完成。我有这个等待连接的异步服务器。 while (clientSocket.Connected) { try
我在简单的 Udp 服务器中使用 UdpClient。 是否可以仅从特定的 IP 地址接收 BeginReceive()? 谢谢 最佳答案 没有。这是 UDP 的基础,它不像 TCP 那样是面向连接的
好的,这是我的第一个堆栈溢出问题,所以请随时提出更好的提问方式或我下次应该包括的内容。大多数时候我可以通过谷歌获得答案,但这个有点棘手...... 我正在用 C# 编写一个 Windows 应用程序,
我的 TCP ping/pong 工作正常,但在尝试添加第二种数据类型后,我遇到了接收程序从未触发 BeginReceive 回调的情况。 代码是相同的,除了第二个(有问题的)数据类型,序列化是提前完
我是一名优秀的程序员,十分优秀!