如何检查客户端 JavaScript 中的端口可用性?
Posted
技术标签:
【中文标题】如何检查客户端 JavaScript 中的端口可用性?【英文标题】:How to check port availability in client-side JavaScript? 【发布时间】:2012-04-10 17:05:00 【问题描述】:如果端口被防火墙或路由器禁用,是否可以在 javascript(在浏览器中)检测?
【问题讨论】:
什么样的Javascript?在浏览器中?在服务器上?什么样的港口?用于收听或连接?本地还是远程? 我想在浏览器中检测它。例如端口 843。 我有一个 flash 策略服务器,但是如果端口 843 不可用,那么我不想加载 flash 小程序。 【参考方案1】:不,使用纯 javascript 这是不可能的(除了向特定端口发出 http 请求,但这些结果意义不大),但是您可以做的是从外部(换句话说,您的服务器)检查特定的端口是开放的。另一种选择是使用 java 小程序或浏览器插件,如果您真的需要它,它可以为您执行此操作,在这种情况下,如果您有必要,您可能可以移植各种开源工具体验这些。但是请注意,这并不完全是用户友好的。 (无论哪种方式,如果你能描述你需要这个的确切场景将会很有用,因为可能有一个完全不同的解决方案。)
【讨论】:
我有一个 flash 策略服务器,但是如果端口 843 不可用,那么我不想加载 flash 小程序。 在这种情况下,我建议您加载 Flash 小程序,如果它无法运行,则对您的页面进行回调,然后将反馈提供给用户(在这种情况下,它与 Flash 功能有关)而不是javascript,这是不可能的)(而且我不知道在flash中什么是可能的,什么是不可能的。)。【参考方案2】:您只能查看预期的响应是否存在。
在使用 javascript 时,必须停留在 HTTP 的边界内。
当然,您可以在服务器的任何端口上发送 Ajax 请求并查看是否出现错误。如果您想检查当前机器的端口,那么在“localhost:843”上发送请求可能会有所帮助。
但错误可能是其他一些原因,不一定是防火墙问题。
我们需要更多信息来帮助您。
【讨论】:
我有一个 flash 策略服务器,但是如果端口 843 不可用,那么我不想加载 flash 小程序。【参考方案3】:如果您足够灵活地使用 jQuery,请查看此Answer by me。这不仅会检查端口的可用性,还会检查成功响应代码 200 是否来自远程(或任何,我的意思是它也支持跨域)服务器。也在这里给出解决方案。我将在这里检查 843 端口。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="jquery-1.7.2-min.js"></script>
</head>
<body>
<script type"text/javascript">
var isAccessible = null;
function checkConnection()
/*make sure you host a helloWorld HTML page in the following URL, so that requests are succeeded with 200 status code*/
var url = "http://yourserverIP:843/test/hello.html" ;
$.ajax(
url: url,
type: "get",
cache: false,
dataType: 'jsonp', // it is for supporting crossdomain
crossDomain : true,
asynchronous : false,
jsonpCallback: 'deadCode',
timeout : 1500, // set a timeout in milliseconds
complete : function(xhr, responseText, thrownError)
if(xhr.status == "200")
isAccessible = true;
success(); // yes response came, execute success()
else
isAccessible = false;
failure(); // this will be executed after the request gets timed out due to blockage of ports/connections/IPs
);
$(document).ready( function()
checkConnection(); // here I invoke the checking function
);
</script>
</body>
</html>
【讨论】:
这提示我查看此方法是否适用于我在尝试 ping 另一端可能没有侦听器运行的端口时遇到的问题。问题是,当没有监听器时,即使将 xhr 请求包装在 try/catch 中,Chrome 也总是会记录错误。这不是杀手,但仍然很丑陋。通过删除成功和错误块并处理完整块中的响应,就像您在此处所做的那样,我们避免了控制台消息!我仍然可以通过异步调用来做到这一点。感谢您的代码。以上是关于如何检查客户端 JavaScript 中的端口可用性?的主要内容,如果未能解决你的问题,请参考以下文章