gpt4 book ai didi

c# - 错误线程上的 SocketException

转载 作者:行者123 更新时间:2023-11-30 22:32:14 29 4
gpt4 key购买 nike

我正在使用 C# UdpClient 类连接到 UDP 网络。有一个 UdpClient 对象,绑定(bind)到一个固定的本地端口,但不绑定(bind)到任何远程端点,因为它需要能够向/从多个不同的端点发送/接收。

我有两个线程:一个用于发送,一个用于接收。现在,当我将数据发送到一个存在的端点但不在该端口上监听时,我期望出现 SocketException。我确实得到了一个。不幸的是,返回异常的不是我的 Send 调用,而是 Receive 调用。所以在我的发送线程上,我将数据发送到一个“无效”的端点,而我的接收线程得到了异常。不幸的是,在这一点上,我当然不知道是什么端点导致了该异常的发生。

在发送之前存储端点,然后在接收线程中访问它只是等待发生的竞争条件错误。

不幸的是,SocketException 没有给我导致错误的端点。

有什么想法吗?是否有可能在发送线程上抛出异常?

非常感谢您的帮助。

最佳答案

当您send() 一个UDP 数据包时,它会在网络上发出并有效地消失。你不应该假设你会得到任何反馈。

有时,如果目的地没有监听器,目的地可能会发回 ICMP_UNREACH_PORT 消息。介于两者之间的路由器可能足够好地将该消息传送到您的操作系统。如果发生这种情况,将在您最初的 send() 调用返回后很久。对于 ICMP_UNREACH_PORT,操作系统通常会缓存它并在您下次向同一目的地执行 send() 时报告错误。其他 ICMP 消息(您没有提到您收到的异常)可能会影响其他调用。

所以最重要的是,无法确定何时或是否会报告 UDP 错误。这取决于很多变量。因此,请准备好处理任何调用的异常,并准备好数据包消失而不会报告任何错误。

关于c# - 错误线程上的 SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826507/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com