這最後解決了jQuery AJAX(和JSONP)的「超時」屬性。看到我自己的答案!如何檢查端口是否在客戶端的網絡/防火牆中打開?
請參閱更新的部分,我也嘗試過使用小應用程序。如果你可以給applet實現一個解決方案,會毫不猶豫地接受你的答案。
我正在使用基於Java的Web應用程序。我的要求是檢查某個端口(如1935)是否在客戶端打開或阻塞。我已經實現了一個「jsonp」(爲什麼'jsonp'?我發現通過AJAX'http'請求不能用於瀏覽器的同源策略的corssdomain')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
}
------------------------------------------ --------------- UPDATE ---------------------------------- ------------------------------
我試過用Java Applet(感謝Y Martin的建議)。這在appletviewer中工作正常。但是,當我在HTML頁面中添加小程序時,它給出了易受攻擊的結果。從某種意義上來說,這很脆弱,當我改變標籤或調整瀏覽器大小時,portAvailable
的值在打印的信息中被改變。
applet代碼:
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);
}
}
,這是我的HTML頁面(我收留了它同一臺計算機上使用不同的Tomcat 6,運行在端口9090我可以鏈接查看此頁面--->http://101.220.25.76:9090/test/
):
<html>
<body>
<applet code="ConnectionTestApplet" width=300 height=50>
</applet>
</body>
</html>
怎麼我做了1935端口阻斷和開通?
我爲端口1935的入站和出站都創建了防火牆規則。 我通過禁用/啓用兩個規則來檢查端口1935打開/阻塞情況。
這是我的S.S.C.C.E。現在請幫助我:)
您的代碼不僅測試「端口」是否打開,而且還有服務器應答HTTP請求。你的代碼是否需要在瀏覽器中運行?可能是你的Java解決方案嗎? –
Applet是一個選項,它取決於我想要避免的瀏覽器的Java插件的可用性。我已經設置了一個服務器,該服務器在1935端口應答,無論是協議(是的,它是HTTP)。我也得到了答覆(當端口打開時)。但是如果端口在客戶端被阻塞,我該如何聽呢?這是點 – tusar
@ YvesMartin,你可以請回答關於小程序或任何其他實施?是的,我希望代碼在瀏覽器上執行。請幫我解決一下這個。 – tusar