C# 单触插座问题
C# 单触插座问题,c#,ios,xamarin.ios,C#,Ios,Xamarin.ios,BeginSend当我断开iPad与网络的连接时,函数不会引发异常。有趣的是,OnSend回调函数调用和结果。 Iscompleted返回true 如果我调用另一个带有错误代码的重载函数,它总是返回success tcpAsyCl.BeginSend( write_data, 0, write_data.Length, SocketFlags.None, ou
BeginSend
当我断开iPad与网络的连接时,函数不会引发异常。有趣的是,OnSend
回调函数调用和结果。
Iscompleted
返回true
如果我调用另一个带有错误代码的重载函数,它总是返回success
tcpAsyCl.BeginSend(
write_data,
0,
write_data.Length,
SocketFlags.None,
out error,
new AsyncCallback(OnSend),
null);
if (error != SocketError.Success)
throw new Exception("Not connected"); //never goes her
有人知道这种行为吗?因为这是一个异步调用!您无法验证下一行中的结果。。。我相信你有一个方法,你可以连接得到正确的错误 异步调用是在新线程中创建的,您需要在那里等待答案。不在主线程中,否则将是一个同步调用 这是一个你可以使用的 我强烈建议你仔细阅读这份文件
当我使用这个表单时,它从不抛出异常。tcpAsyCl.BeginSend(write_data,0,write_data.Length,SocketFlags.None,new AsyncCallback(OnSend),null);但在Windows下,当netwrok不可用时,它会引发异常。在iOS中,我无法修复断开连接的状态。您所有的错误都将出现在
OnSend
回调中,因为在那里您告诉异步方法返回信息,您可以使用委托而不是方法。请参阅更新答案上的链接。添加链接文档,其中包含在异步调用中使用System.Net.Sockets
所需的所有代码和说明。我尝试此方法,但没有帮助。当我断开设备与网络的连接时,它会继续在OnSend客户端发送数据。EndSend(结果)在断开连接的时间内返回14字节。