Flash 闪存套接字未定义属性,但已定义?

Flash 闪存套接字未定义属性,但已定义?,flash,sockets,Flash,Sockets,您好,我正在尝试在flash中打开套接字。因此我遵循了一个教程,但出现了错误: package com.game.game { import flash.net.socket; import flash.events.*; public dynamic class game { var mysocket:Socket = new Socket(); Security.allowDomain("*"); mysoc

您好,我正在尝试在flash中打开套接字。因此我遵循了一个教程,但出现了错误:

package com.game.game
{
    import flash.net.socket;
    import flash.events.*;
    public dynamic class game
    {
        var mysocket:Socket = new Socket();

        Security.allowDomain("*");

        mysocket.addEventListener(Event.CONNECT, onConnect);
        mysocket.addEventListener(Event.CLOSE, onClose);
        mysocket.addEventListener(IOErrorEvent.IO_ERROR, onError);
        mysocket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
        mysocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);

        mysocket.connect("hejp.co.uk", 80);
    }

}
我犯了以下错误:

1120: Access of undefined property mysocket.
1120: Access of undefined property onConnect.
1120: Access of undefined property mysocket.
1120: Access of undefined property onClose.
1120: Access of undefined property mysocket.
1120: Access of undefined property onError.
1120: Access of undefined property mysocket.
1120: Access of undefined property onResponse.
1120: Access of undefined property mysocket.
1120: Access of undefined property onSecError.
1120: Access of undefined property mysocket.
The class 'com.game.game.game' must subclass 'flash.display.MovieClip' since it is linked to a library symbol of that type.
我必须进口什么吗???
有什么想法吗?

看起来您有正确的套接字代码,但它需要位于方法内部。如果将用于实例化套接字的代码放在构造函数方法中,则在实例化类时将连接到套接字。或者,您可以将套接字代码放在另一个公共方法中,该方法可以从类外部调用

您可能还需要通过在声明中声明public或private来声明类属性和方法的范围

您还需要声明每个侦听器函数,否则套接字将没有要连接的函数

package com.game.game
{
    import flash.net.socket;
    import flash.events.*;
    public dynamic class game
    {
        //public class variables
        public var mysocket:Socket;

        //constructor
        public function game() {
            mysocket = new Socket();

            Security.allowDomain("*");

            mysocket.addEventListener(Event.CONNECT, onConnect);
            mysocket.addEventListener(Event.CLOSE, onClose);
            mysocket.addEventListener(IOErrorEvent.IO_ERROR, onError);
            mysocket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
            mysocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);

            mysocket.connect("hejp.co.uk", 80);
        }

        //private listener methods
        private function onConnect(evt:Event):void {
            //connect method code
        }

        private function onClose(evt:Event):void {
            //close method code
        }

        private function onError(evt:IOErrorEvent):void {
            //error method code
        }

        private function onResponse(evt:ProgressEvent):void {
            //response method code
        }

        private function onSecError(evt:SecurityErrorEvent):void {
            //security error method code
        }
    }

}

你的课应该延长MovieClip。公共动态类游戏扩展了MovieClip。导入flash.display.MovieClip使其生效。另外,通常的做法是让类名以大写字母开头。谢谢,但我有两个错误:1084:语法错误:分号前应为左括号。1084:语法错误:应在程序结束前使用rightbrace。已修复该错误,但现在找不到:1046:类型或该类型不是编译时常量:Socket。我刚刚注意到您的原始代码,我的响应在导入语句中使用了小写的Socket。将其更改为大写应该可以消除该错误。例如:导入flash.net.Socket;谢谢,还有一个错误,但我通过导入flash.system.Security修复了它。非常感谢。:)没问题。为了便于将来参考,如果使用Flash Builder Auto Complete,Flash Builder通常会自动插入必要的导入语句。