当前位置: 首页 > 编程语言 > C#

处理网络断开共享

时间:2023-04-10 20:28:43 C#

处理网络断开我正在尝试使用HttpWebRequest对象进行“长轮询”。在我的C#应用程序中,我使用HttpWebRequest发出HTTPGET请求。然后,我等待来自beginGetResponse()的响应。我正在使用ThreadPool.RegisterWaitForSingleObject等待响应或超时(1分钟后)。我已将目标网络服务器设置为需要很长时间才能响应。所以,我有时间断开网线。发送请求后,我拉网线。发生这种情况时有没有办法获得异常?所以我不必等待超时?超时(来自RegisterWaitForSingleObject)发生在1分钟超时到期后,而不是异常。有没有办法确定网络连接是否断开?目前,这种情况与Web服务器响应时间超过1分钟的情况无法区分。我找到了解决方案:我可以在调用beginGetResponse之前在HttpWebRequest上调用以下内容:req.ServicePoint.SetTcpKeepAlive(true,10000,1000)我认为这意味着在10秒不活动后,客户端将保持TCPA“保持活动状态”被发送到服务器。如果由于网线被拔掉导致网络连接丢失,保活将失败。因此,当电缆被拉出时,我发送keepalive10秒(最多),然后BeginGetResponse的回调发生。在回调中,当我调用req.EndGetResponse()时,出现异常。不过,我想这会抵消长时间轮询的好处之一。因为我们还在发送数据包。我会留给你尝试拔掉插头。ManualResetEventdone=newManualResetEvent(false);voidMain(){//设置网络适配器的物理地址以监控运行状态stringphysicalAddress="00215A6B4D0F";//创建网络请求varrequest=(HttpWebRequest)HttpWebRequest.Create(newUri("http://stackoverflow.com"));//创建定时器以在网络丢失时取消操作vartimer=newSystem.Threading.Timer((s)=>{NetworkInterfacenetworkInterface=NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(nic=>nic.GetPhysicalAddress().ToString()==physicalAddress);if(networkInterface==null){thrownewException("Couldnotfindnetworkinterfacewithphisicaladdress"+physicalAddress+".");}elseif(networkInterface.OperationalStatus!=OperationalStatus.Up){控制台.WriteLine("网络已关闭,正在中止。");request.Abort();done.Set();}else{Console.WriteLine("网络仍在运行。");}},null,100,100);//启动异步请求IAsyncResultasynchResult=request.BeginGetResponse(newAsyncCallback((o)=>{try{varresponse=(HttpWebResponse)request.EndGetResponse((IAsyncResult)o);varreader=newStreamReader(response.GetResponseStream(),System.Text.Encoding.UTF8);varwriter=newStringWriter();writer.Write(reader.ReadToEnd());Console.Write(writer.ToString());}finally{done.Set();}}),null);//等待结束done.WaitOne();我认为您不会喜欢这个您可以在向慢速服务器发出请求后测试您的Internet连接。有很多方法可以做到这一点——从对google.com(或网络中的某个IP地址)的另一个请求到P/Invoke。您可以在此处获得更多信息:测试互联网连接的最快方法创建原始请求后,您进入一个循环检查互联网连接,直到互联网中断或原始请求返回(它可以设置一个变量来停止循环).帮助?以上就是《C#学习教程:处理掉网和共享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: