如何设置socket的Connect超时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置socket的Connect超时相关的知识,希望对你有一定的参考价值。

针对套接字操作设置默认超时的概述StreamSocket类实现Windows运行时应用中的TCP套接字。TCP套接字必须建立连接才能发送或接收任何网络数据。Windows8.1、WindowsPhone8.1和WindowsServer2012中实现的基础TCP套接字会针对所有的TCP连接套接字操作设置默认超时。对于每个来源和目标地址对,在使用主机名或终结点时,默认超时为3分钟(180秒)。因此,如果目标主机名有两个IP地址,那么,只有在经过大约6分钟之后,连接操作才会超时。对于使用Windows运行时应用的客户体验来说,这个默认超时可能过长。因此,使用StreamSocket类的应用可能希望针对流套接字连接操作设置较短的自定义超时。在发送或接收网络数据时,DatagramSocket和StreamSocket类没有默认超时。因此,任何发送或接收操作都将永远等待。使用套接字的Windows运行时应用可能希望针对这些操作设置超时以获取更好的客户体验。StreamSocketListener类将永远侦听和等待传入的连接请求。如何针对套接字操作设置自定义超时JavaScript语言支持计时事件,这些事件可以按指定的时间间隔执行某些代码。JavaScript计时事件setInterval()-按指定的时间间隔(毫秒)反复执行某个函数。setTimeout()-在等待指定的毫秒之后执行一次某个函数。计时事件函数是在HTMLDOMWindow对象中实现的。WinJS命名空间为包括WinJS.Promise对象的JavaScript功能提供特殊的Windows库。timeout(timeout,promise)方法包装setTimeout函数。如果在timeout参数中指定的毫秒数内未完成承诺,则Windows应用商店应用可以使用timeout(timeout,promise)方法来取消此承诺。如果在timeout参数中指定的时间间隔内未完成套接字操作,则可以调用timeout(timeout,promise)方法并将套接字操作作为promise参数以使该操作超时。只要套接字操作仍在挂起,就能将其取消。WinJS.Promise对象和timeout(timeout,promise)方法可以与Windows运行时应用中的任何异步操作一起使用,包括所有的异步套接字操作。对于正常的完成操作,可以在timeout(timeout,promise)方法调用之后添加逗.then地。对于所有这三个类来说,使用超时的基本模型是相同的。以下讨论使用StreamSocket上的连接操作作为示例。在使用DatagramSocket或StreamSocket对象发送或接收网络数据时,或者在使用StreamSocketListener对象侦听传入连接时,可以使用相同的模型来实现超时。创建一个StreamSocket。调用timeout(timeout,promise)方法并将其中一个StreamSocket.connectAsync方法作为promise参数。在源代码的末尾添加then(successFunction,errorFunction)方法来处理成功和错误案例。在出错时,关闭套接字。在取消StreamSocket操作承诺之后,将无法再使用已取消的StreamSocket。以下示例将针对StreamSocket连接操作实现自定义超时。JavaScriptvarclientSocket=null;vartimeout=10000;//10secondsfunctionopenClient()varserverHostName=newWindows.Networking.HostName("");varserviceName="http";//displayStatus("Client:connectionstarted.");clientSocket=newWindows.Networking.Sockets.StreamSocket();//varpromise=clientSocket.connectAsync(serverHostName,serviceName)WinJS.Promise.timeout(timeout,clientSocket.connectAsync(serverHostName,serviceName).then(function()//displayStatus("Client:connectioncompleted.");//Doyoursocketoperationshere.,function(reason)//Therearemanyreasonsforthisfailure:thepromisemighthave//timedout,ortheserverhostrefusedtheconnection,orthere//wasanTCPissue,orseveralotherpossibilities.//displayStatus("Client:connectionfailed.");//displayStatus(reason.message);clientSocket.close();clientSocket=null;)); 参考技术A 针对套接字操作设置默认超时的概述StreamSocket类实现Windows运行时应用中的TCP套接字。TCP套接字必须建立连接才能发送或接收任何网络数据。Windows8.1、WindowsPhone8.1和WindowsServer2012中实现的基础TCP套接字会针对所有的TCP连接套接字操作

c# socket connect 连接超时问题。

sa.Blocking = false;
            for (int i = 0; i < 10; ++i)
            {
                try
                {
                    sa.Connect(ip, port);
                }
                catch
                { 
                }
                Thread.Sleep(100);
                if (sa.Connected)
                {
                    break;
                }
            }
          
            
            sa.Blocking = true;
            if (sa.Connected == false)
            {
                connIsok = false;
                return connIsok;
            }

connect 不能设置超时 时间 。简单 一点 。设置非阻塞。不过没有测试网络延迟很厉害的网络情况。

以上是关于如何设置socket的Connect超时的主要内容,如果未能解决你的问题,请参考以下文章

如何控制C#Socket的连接超时时间

c# socket connect 连接超时问题。

android 2g移动网络 如何判断超时

Flutter - Socket.Connect() - SocketException:操作系统错误:连接超时

在尝试连接之前在 Socket 上设置超时

socket_connect没有超时