问题描述
|
我正在将应用程序从flex sdk 3.4迁移到flex sdk 4.5。
我使用AS3教程的telnet示例作为基础来构造实现特定协议的通用套接字类。
主要问题是具有经过验证的套接字类的新应用程序不会触发任何事件(无错误-无连接-无数据-无)。使用connect方法的try catch不会引发任何错误。我检查了事件是否成功连接,但从未触发过它们。
更新:我根据建议修改了代码。实际上,现在我收到有关安全策略的错误。
这是构造函数:
public function GenericSocket(server:String,port:int,output:TextArea) {
// set class variables to the values passed to the constructor.
serverURL = server;
portNumber = port;
ta = output;
// Create a new Socket object and assign event listeners.
socket = new Socket();
socket.addEventListener(Event.CONNECT,connectHandler);
socket.addEventListener(Event.CLOSE,closeHandler);
socket.addEventListener(ErrorEvent.ERROR,errorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
//Added by suggestions
socket.addEventListener(SecurityErrorEvent.Security_ERROR,securityErrorHandler);
socket.addEventListener(ProgressEvent.soCKET_DATA,dataHandler);
// Load policy file from Remote Server.
Security.loadPolicyFile(\"http://\" + serverURL + \"/crossdomain.xml\");
// Attempt to connect to remote socket server.
try {
msg(\"Trying to connect to \" + serverURL + \":\" + portNumber + \"\\n\");
socket.connect(serverURL,portNumber);
} catch (error:Error) {
/*
Unable to connect to Remote Server,display error
message and close connection.
*/
msg(error.message + \"\\n\");
socket.close();
}
}
这是connectHandler,securityErrorHandler和ioErrorHandler(从不称为Update:安全处理程序为beign调用)
private function connectHandler(event:Event):void {
if (socket.connected) {
msg(\"connected...\\n\");
} else {
msg(\"Error: unable to connect\\n\");
}
}
//Added by suggestions
private function securityErrorHandler(event:SecurityErrorEvent):void {
msg(\"securityErrorHandler: \" + event+\"\\n\");
}
public function ioErrorHandler(event:IOErrorEvent):void {
msg(\"Error: Unable to connect: socket error.\\n\");
}
一些想法或指令可能会有用。也许要测试一下通用套接字?也许是应用程序的类型?
更新:
我收到的错误是:
securityErrorHandler:[SecurityErrorEvent类型= \“ securityError \”气泡=假可取消=假eventPhase = 2文本= \“错误#2048 \”]
我在项目中使用这些包含:
xmlns:mx=\"http://www.adobe.com/2006/mxml\"
xmlns:s=\"library://ns.adobe.com/flex/spark\"
xmlns:mx2=\"library://ns.adobe.com/flex/mx\"
解决方法
在这里,您可以找到我前段时间针对您遇到的相同问题的答案。请务必阅读注释并遵循链接,其中一个链接上有一个很好的示例/教程。它与您提供安全策略的方式基本相关,在应用程序在端口843上发送安全请求后,必须通过套接字来提供它。为此,您当然需要一个服务器应用程序,不能由Web服务器通过HTTP提供服务。