Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单触插座问题_C#_Ios_Xamarin.ios - Fatal编程技术网

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字节。