tus*_*sar 5 javascript java jquery jsonp java-ee
最后使用jQuery AJAX(和JSONP)的"timeout"属性解决了这个问题.看看我自己的答案!
请参阅更新的部分,我也尝试过applet.如果您可以通过applet实现提供解决方案,我们会毫不犹豫地接受您的答案.
我正在使用基于Java的Web应用程序.我的要求是检查特定端口(例如1935)是否在客户端打开或阻止.我已经实现了一个"jsonp"(为什么'jsonp'?我发现通过AJAX的'http'请求不能用于corssdomain for browsers'相同的原始策略')AJAX调用我的一个包含特定端口的服务器.如果服务器返回xhr.status == 200端口是打开的.这是一个缺点,我不能让执行流等待(同步),直到调用完成.这是我正在使用的JavaScript函数.
任何替代解决方案(必须是客户端的东西必须与我的应用程序并行,请不要建议python/php /其他语言)也欢迎.谢谢你的时间.
function checkURL() {
var url = "http://10.0.5.255:1935/contextname" ;
var isAccessible = false;
$.ajax({
url: url,
type: "get",
cache: false,
dataType: 'jsonp',
crossDomain : true,
asynchronous : false,
jsonpCallback: 'deadCode',
complete : function(xhr, responseText, thrownError) {
if(xhr.status == "200") {
isAccessible = true;
alert("Request complete, isAccessible==> " + isAccessible); // this alert does not come when port is blocked
}
}
});
alert("returning isAccessible=> "+ isAccessible); //this alert comes 2 times before and after the AJAX call when port is open
return isAccessible;
}
function deadCode() {
alert("Inside Deadcode"); // this does not execute in any cases
}
Run Code Online (Sandbox Code Playgroud)
-------------------------------------------------- ------- UPDATE ------------------------------------------ ----------------------
我尝试过使用Java Applet(感谢Y Martin的建议).这在appletviewer中运行良好.但是当我在HTML页面中添加applet时,它会提供易受攻击的结果.从某种意义上说,当我更改选项卡或调整浏览器大小时,其中的值将portAvailable在打印的消息中被更改.
小程序代码:
import java.applet.Applet;
import java.awt.Graphics;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ConnectionTestApplet extends Applet {
private static boolean portAvailable;
public void start() {
int delay = 1000; // 1 s
try {
Socket socket = new Socket();
/*****This is my tomcat5.5 which running on port 1935*************/
/***I can view it with url--> http://101.220.25.76:1935/**********/
socket.connect(new InetSocketAddress("101.220.25.76", 1935), delay);
portAvailable = socket.isConnected();
socket.close();
System.out.println("init() giving---> " + portAvailable);
}
catch (Exception e) {
portAvailable = false;
System.out.println("init() giving---> " + portAvailable);
System.out.println("Threw error---> " + e.getMessage());
}
}
public void paint(Graphics g) {
System.out.println("Connection possible---> " + portAvailable);
String msg = "Connection possible---> " + portAvailable;
g.drawString(msg, 10, 30);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的HTML页面(我在同一台计算机上使用不同的Tomcat 6托管它,它运行在端口9090上.我可以使用url --->查看此页面http://101.220.25.76:9090/test/):
<html>
<body>
<applet code="ConnectionTestApplet" width=300 height=50>
</applet>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我是如何做端口1935阻塞和开放的?
我为端口1935创建了入站和出站的防火墙规则.我通过禁用/启用这两个规则来检查端口1935打开/阻止方案.
这是我的SSCCE.现在请帮帮我:)
明白了!!!我已经用 JSONP 和 jQuery AJAX 调用解决了我的问题。我发现了timeoutjQuery AJAX的属性,当端口被阻塞或打开时,我的代码可以流畅地执行。这是未来访客的解决方案。感谢所有回答者的贡献。
<!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() {
var url = "http://101.212.33.60:1935/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, esecute 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13757 次 |
| 最近记录: |