2012-10-26 10 views
5

मुझे यहां बहुत सारी पोस्ट मिल गई हैं, लेकिन कोई भी मेरे पास सही समस्या का समाधान नहीं कर रहा है। त्रुटि # 2048::as3 XMLSocket नीति फ़ाइल का अनुरोध नहीं कर रहा है

मैं बस के बाद मैं कनेक्ट करने का प्रयास अपने सर्वर के लिए एक XMLSocket कनेक्ट करने के लिए कोशिश कर रहा हूँ, और के बारे में 10 सेकंड, मैं एक SecurityErrorEvent मिलता है। सुरक्षा सैंडबॉक्स उल्लंघन (## से cannotload डेटा ## ##। । ##: 9024)।

सर्वर-साइड, मेरे पास एक PHP स्क्रिप्ट है जो पोर्ट 9024 के लिए सुनती है। मुझे पूरा यकीन है कि यह सही काम कर रहा है, क्योंकि मैं अन्य php स्क्रिप्ट का उपयोग करके उससे कनेक्ट कर सकता हूं। साथ ही, जब मेरा क्लाइंट-साइड php नीति-फ़ाइल अनुरोध करता है, तो मेरी सर्वर स्क्रिप्ट नीति लौटाती है। यहाँ AS3 है:

private var sock:XMLSocket = new XMLSocket(); 

// in my connection method 
Security.allowDomain("domain.com"); 
Security.loadPolicyFile("dubDomain.domain.com/crossdomain.xml"); 
Security.loadPolicyFile("xmlsocket://domain.com:9024"); 
sock.connect("11.11.11.11", 9024); 

मैं sock.connect कॉल करने से पहले AS3 में सॉकेट से श्रोताओं निर्धारित करते हैं, लेकिन मुझे लगता है इससे पहले कि वे ट्रिगर हो जाएगा जो कुछ भी गलत हो जाता है होता है।

मेरी समझ यह है कि दूसरी सुरक्षा .loadPolicyFile, या सॉकेट.कनेक्ट को सॉकेट 9024 पर सर्वर से कनेक्ट करने का प्रयास करना चाहिए और नीति फ़ाइल का अनुरोध करना चाहिए। मेरा मानना ​​है कि सॉक.कनेक्ट केवल पोर्ट 843 से प्रतिक्रिया प्राप्त करने में विफल होने के बाद अनुरोध भेज देगा।

सर्वर अंत में, हालांकि, यह कनेक्ट करने के लिए कोई प्रयास नहीं किया जाता है। मैंने आईडीई (फ्लैशडिवेल) से और सर्वर पर अपलोड किए जाने पर एसएफएफ से यह कोशिश की है।

मैं इसे पोर्ट 843 पर आज़माउंगा, लेकिन मेरे पास मेरे सर्वर पर व्यवस्थापक अधिकार नहीं हैं। यदि यह मायने रखती है, यहाँ PHP स्क्रिप्ट का एक सा है:

$client = socket_accept($sock); 
if (socket_getpeername($client, $address, $theirport)) 
{ 
echo "Client $address: $theirport is now connected to us\n"; 
} 
$input = socket_read($client, 1024000); 
echo "[client] $input"; 

$ जुर्राब, ठीक स्थापित होने के रूप में मैं एक और php स्क्रिप्ट का उपयोग कर कनेक्ट कर सकते हैं लगता है, लेकिन यह सिर्फ हमेशा के लिए इंतजार कर रहा है जब मैं AS3 के साथ कनेक्ट करने का प्रयास ।

कोई सुझाव? क्या मैं कुछ गलत समझ रहा हूँ? अग्रिम में धन्यवाद।

उत्तर

0
Security.loadPolicyFile("subDomain.domain.com/crossdomain.xml"); 
sock.connect("11.11.11.11", 9024); 

आप सबडोमेन के लिए क्रॉसडोमेन फ़ाइल का अनुरोध कर रहे हैं। यह आपको subdomain.domain.com से कनेक्ट करने के लिए अधिकतम, अधिकतम अनुमति देगा। यह आपको डोमेन.com से कनेक्ट करने की अनुमति नहीं दे सकता है।

XMLSocket क्या करता है, क्रॉसडोमेन लोड करता है जहां यह लगता है कि यह हो सकता है, होस्ट होस्ट आईपी से संबंधित है। यह पहले 11.11.11.11/crossdomain.xml पर होगा। यदि यह नहीं मिला है, तो यह 11.11.11.11:843 तक पहुंचने का प्रयास करेगा। यह विफल हो जाता है, आपके पास एक सुरक्षा त्रुटि फेंक दी जाएगी।

तो, आप या तो उप डोमेन से सीधे कनेक्ट करने की आवश्यकता:

sock.connect("subDomain.domain.com", 9024); 

या एक crossdomain.xml जो आप 11.11.11.11:9024 पर कनेक्ट करने के लिए अनुमति देता है जोड़ने के लिए, 11.11.11.11/crossdomain.xml पर :

<allow-access-from domain="YOURSWFDOMAIN" to-ports="9024"/> 

फिर, आपको अपने सर्वर पर फ्लैश से अनुरोध प्राप्त होगा। आप तब जाने के लिए अच्छे हैं।

+0

सहायता के लिए धन्यवाद, लेकिन दुर्भाग्य से, यह अभी भी काम नहीं कर रहा है। फ्लैश में अब मेरे पास क्या है: Security.allowInsecureDomain (ip); \t \t \t Security.allowDomain (ip); \t \t \t सुरक्षा.लोड पॉलिसीफाइल (आईपी + "/ क्रॉसडोमेन।एक्सएमएल "); \t \t \t सॉक.कनेक्ट (आईपी, 9 024); आईपी =" डोमेन.com "; सब कुछ अब सबडोमेन की बजाय डोमेन से कनेक्ट हो रहा है। – Tyler

+1

मैंने अपने सर्वर पर लॉग की जांच की, और ऐसा लगता है जैसे crossdomain.xml फ़ाइल को उठाया जा रहा है, लेकिन मुझे अभी भी एक ही समस्या मिल रही है। यहां crossdomain.xml है: <क्रॉस-डोमेन-नीति> <साइट-नियंत्रित अनुमति-क्रॉस-डोमेन-नीतियां =" सभी "/> <अनुमति-पहुंच-डोमेन से = "*" से-पोर्ट्स = "9024" /> Tyler

संबंधित मुद्दे