问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

如何针对套接字操作设置超时

提问网友 发布时间:2022-04-23 22:37
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2022-04-22 14:20
针对套接字操作设置默认超时的概述
StreamSocket 类实现 Windows 运行时应用中的 TCP 套接字。TCP 套接字必须建立连接才能发送或接收任何网络数据。Windows 8.1、Windows Phone 8.1 和 Windows Server 2012 中实现的基础 TCP 套接字会针对所有的 TCP 连接套接字操作设置默认超时。对于每个来源和目标地址对,在使用主机名或终结点时,默认超时为 3 分钟(180 秒)。因此,如果目标主机名有两个 IP 地址,那么,只有在经过大约 6 分钟之后,连接操作才会超时。对于使用 Windows 运行时应用的客户体验来说,这个默认超时可能过长。因此,使用 StreamSocket 类的应用可能希望针对流套接字连接操作设置较短的自定义超时。
在发送或接收网络数据时,DatagramSocket 和 StreamSocket 类没有默认超时。因此,任何发送或接收操作都将永远等待。使用套接字的 Windows 运行时应用可能希望针对这些操作设置超时以获取更好的客户体验。
StreamSocketListener 类将永远侦听和等待传入的连接请求。
如何针对套接字操作设置自定义超时
JavaScript 语言支持计时事件,这些事件可以按指定的时间间隔执行某些代码。
JavaScript 计时事件
setInterval() - 按指定的时间间隔(毫秒)反复执行某个函数。
setTimeout() - 在等待指定的毫秒之后执行一次某个函数。
计时事件函数是在 HTML DOM Window 对象中实现的。
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 连接操作实现自定义超时。
JavaScript

var clientSocket = null;
var timeout = 10000; // 10 seconds
function openClient() {
var serverHostName = new Windows.Networking.HostName("www.contoso.com");
var serviceName = "http";

// displayStatus("Client: connection started.");
clientSocket = new Windows.Networking.Sockets.StreamSocket();
//var promise = clientSocket.connectAsync(serverHostName, serviceName)
WinJS.Promise.timeout(timeout, clientSocket.connectAsync(serverHostName, serviceName).then(function () {
// displayStatus("Client: connection completed.");
// Do your socket operations here.

}, function (reason) {
// There are many reasons for this failure: the promise might have
// timed out, or the server host refused the connection, or there
// was an TCP issue, or several other possibilities.

// displayStatus("Client: connection failed. ");
// displayStatus(reason.message);
clientSocket.close();
clientSocket = null;
}
));
}

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

绿豆配核桃打豆浆可以吗 电脑屏幕总是出现[windows socket error:套接字操作尝试连接一个无法连接的主机(10065),on API"connect"] cuteftp使用问题 用ftp连接香港的空间显示数据套接字错误: 连接已超时 如何解决正在中止线程 PDF怎么弄成链接,有没有简单操作的方法? 为什么不要使用Response.Close 哪个网址下载PDF格式的文件比较方便、安全? recv函数返回什么值? PDF电子书下载网站怎么下载文件呀? 有知道的麻烦一定帮忙啊. 下载网址是:http://www.anysafer.com 如何关闭连接套接字??? 套接字操作超时怎么解决 windows socket error:套接字操作尝试连接一个无法连接的主机 用豆浆机怎么做绿豆汤 顺便告诉我点豆浆机食谱 如何全部提取PDF中的超链接? VB导致系统重启 网页中如何设置pdf下载链接? 打豆浆有哪些食谱 解决VMware 14虚拟机报错“无法连接MKS:套接字连接尝试次数太多,正在放弃” Socket 编程中 close() 和 shutdown() 有什么区别? 绿豆可以和红枣核桃一起做豆浆吗 http://英语作文《如何节约粮食》 围绕节约粮食的作文题目,题目一定要新颖,让人耐人寻味 冰糖有些化了能放在面包机里烘烤一下吗 做面包,糖可以先可以用水融化了再放进面粉吗? 做面包可以用冰糖吗 大蒜冰糖水可以和肉松面包一起吃吗 冰糖开始化了,还能吃吗? 黄冰糖不能做面包吗? 融化的冰糖还可以吃么? 做面包是不是用什么糖都可以的? 做包子没有糖用冰糖可以代替吗? (1)求该债券的资金成本。(2)若债券溢价债券按5100元溢价发行,求该债券的资金成本。 糖粉可以做面包吗? 公司发行债券后.什么是债券的资金成本率和综合资金成本,怎样计算?_百... 长痘痘可以吃面包吗 三一重工目前的债券资本成本是多少,怎么算的?需要具体数据和计算过程。_百度问一问 在家可以自己做什么甜点 菠萝蜜面包怎么做好吃 企业采用发行债券筹资方式的资金成本最高吗??
Top