【问题标题】:SocketException for closing a UDP Socket用于关闭 UDP 套接字的 SocketException
【发布时间】:2013-02-23 21:20:21
【问题描述】:

我有一个用 C# 编写的库,我在 WP7/iOS/Windows 应用程序中使用过它。它适用于 Mono,因为我只使用 UdpClient,仅此而已。它是一个自动查找对等点的开源库。你可以在salaam.codeplex.com找到它

现在我只是想将我的应用程序移植到 Android。当我找到我的同伴时,我只想关闭 UDP 连接并转到另一个活动,但是当我关闭套接字时,尽管我把它放在了一个 try 流行语中,但它会抛出一个 SocketException 并退出。

我能做些什么来防止这种情况发生?

如果你完成了这个活动,它会给你这个例外,如果你打电话给SalaamBrowser.Close();它是一样的。

异常文本:

未处理的异常: System.Net.Sockets.SocketException:中断 在 System.Net.Sockets.Socket.ReceiveFrom_nochecks_exc (System.Byte[] buf, Int32 offset, Int32 size, SocketFlags flags, System.Net.EndPoint& remote_end, Boolean throwOnError, System.Int32& error) [0x00000] in :0

在 System.Net.Sockets.Socket.ReceiveFrom_nochecks (System.Byte[] buf, Int32 offset, Int32 size, SocketFlags flags, System.Net.EndPoint& remote_end) [0x00000] in :0

在 System.Net.Sockets.Socket+Worker.ReceiveFrom () [0x00000] in :0

谢谢

【问题讨论】:

  • 提供的异常文本是什么?
  • 未处理的异常:System.Net.Sockets.SocketException:在 System.Net.Sockets.Socket.ReceiveFrom_nochecks_exc 处中断(System.Byte[] buf,Int32 偏移量,Int32 大小,SocketFlags 标志,System.Net .EndPoint& remote_end, Boolean throwOnError, System.Int32& error) [0x00000] in :0 at System.Net.Sockets.Socket.ReceiveFrom_nochecks (System.Byte[] buf, Int32 offset, Int32 size, SocketFlags flags, System .Net.EndPoint& remote_end) [0x00000] in :0 at System.Net.Sockets.Socket+Worker.ReceiveFrom () [0x00000] in :0

标签: c# .net sockets xamarin.android


【解决方案1】:

抛出异常的是接收,而不是关闭。它正在抛出它,因为你关闭了它。我不知道你还能期待什么。

【讨论】:

  • 是的,但问题是我已经涵盖了它。我的意思是我把它放在一个 try/catch 短语中。有趣的是,当我打印输出时,它通过了所有这些尝试,实际上没有任何东西可以捕获。此外,此代码在 WP7/iOS/Windows 上运行良好!
【解决方案2】:

您的try/catch 不起作用的原因是错误发生在该块之外。

您正在使用Async 传输,并且在关闭套接字时您的接收委托会引发异常。

您从错误的点终止,从接收委托内部执行。

您所做的就像是拔掉电脑的电源,而不是关闭它。

【讨论】:

    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2014-09-09
    • 2023-03-03
    • 1970-01-01
    • 2021-12-10
    • 2011-02-15
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多