您的主機中的軟體中止了一個已建立的串連

來源:互聯網
上載者:User
最近做一些小遊戲,用到了socket,用戶端是flash,服務端用的是C#。通訊用的socket,在本地好好的,可是放到伺服器上的時候出現了”您的主機中的軟體中止了一個已建立的串連 “這個錯誤,搜了一大堆,全是說網路問題,防火牆之類的,全部沒有用。垃圾們來轉來轉去,最後也沒有解決。沒有辦法,最後自己調試的時候看到了<policy-file-request/>,這個不是和許可權有關嗎?於是又找一些資料,發現adobe真是蛋疼。我把要點列出來,也是網上的。(網址:http://hi.baidu.com/dobodo/blog/item/b1614aea02efe8dfd439c967.html)如下:

在 Adobe Flash Player 升級到 9.0.124 後,由於安全性原則更改,原來 Socket 或 XmlSocket 的應用裡的 http 方式載入安全性原則的手段不能繼續使用。更改如下:

1, 首先檢測目標伺服器的 843 連接埠是否提供安全性原則
2, 如果 1 沒有檢測到策略,則檢測 actionscript 是否使用了 Security.loadPolicyFile(xmlsocket://)手段提供安全性原則,如果還沒檢測到,則使用第 3 步檢測

3, 檢測目標伺服器目標連接埠是否提供安全性原則。

在說具體處理方式前,我先描述一下 Flash Player 的驗證過程。在 Flex 程式發出 Socket 或 XmlSocket( 以下統稱為 Socket) 請求前, FlashPlayer 會先判斷是否為本地調用,如果不是。即用一個 Socket 去連結到你的服務端,三向交握成功後一方面發出字串“ <policy-file-request/>\0 “另一方面監聽返回的安全性原則。安全性原則接收成功後, FlashPlayer 就斷開驗證的 Socket ,然後再運行程式本身的 Socket 。在整個 SWF
運行期間,無論你請求多少次,只要域相同, FlashPlayer 就只驗證一次。這裡有兩個重點:
第一個是驗證的 Socket 和程式的 Socket 是兩個 Socket 。所以你在本地測試時,服務端監聽到 N 個 Socket 請求,但布置到服務端後,服務端會監聽到 N+1 個請求。

第二是驗證的 Socket 發送“ <policy-file-request/>\0 “請求和接收你的策略檔案是沒有先後關係的,所以你沒必要接收完“ <policy-file-request/>\0 “後才發策略檔案。我的做法是只要監聽到請求,就把策略字串發過去。

在Java中,我處理的方法是獨立啟動一個843連接埠的服務專門監聽授權請求,這樣用戶端響應速度很快,程式碼片段如下:
String xml = "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0";
Socket socket=serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream(), "UTF-8"));
PrintWriter pw = new PrintWriter(socket.getOutputStream());
char[] by = new char[22];
br.read(by, 0, 22);
String s = new String(by);
System.out.println("s="+s);
if (s.equals("<policy-file-request/>")) {
System.out.println("接收policy-file-request");
pw.print(xml);
pw.flush();
br.close();
pw.close();
socket.close();
}
另外,一定要注意 xml 字串後面的 ”\0” ,因為 Flash Player 是用他來做分隔字元的,如果你不加上,用戶端驗證 socket 可能就一直等待。另外授權接收的socket一定要斷開。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.