Actionscript 3 UDP数据报套接字未通过并给出null错误

Actionscript 3 UDP数据报套接字未通过并给出null错误,actionscript-3,air,udp,flash-cs6,datagram,Actionscript 3,Air,Udp,Flash Cs6,Datagram,我有一个UDP套接字程序,在脚本3中使用flash CS6编译的Adobe Air,我一直收到一个错误 TypeError:错误#1009:无法访问空对象引用的属性或方法。 在Untitled_fla::MainTimeline/fl_MouseClickHandler()[Untitled_fla.MainTimeline::frame1:64] 这是我的密码: import flash.display.Sprite; import flash.events.DatagramSocketDa

我有一个UDP套接字程序,在脚本3中使用flash CS6编译的Adobe Air,我一直收到一个错误

TypeError:错误#1009:无法访问空对象引用的属性或方法。 在Untitled_fla::MainTimeline/fl_MouseClickHandler()[Untitled_fla.MainTimeline::frame1:64]

这是我的密码:

import flash.display.Sprite; 
import flash.events.DatagramSocketDataEvent; 
import flash.events.Event; 
import flash.net.DatagramSocket; 
import flash.utils.ByteArray; 

var datagramSocket:DatagramSocket; 

//The IP and port for this computer 
var localIP:String = iploc.text; 
var localPort:int = portloc.value; 

//The IP and port for the target computer 
var targetIP:String = ipto.text; 
var targetPort:int = portto.value; 

function DatagramSocketExample() 
{ 
    //Create the socket 
    datagramSocket = new DatagramSocket(); 
    datagramSocket.addEventListener( DatagramSocketDataEvent.DATA, dataReceived ); 

    //Bind the socket to the local network interface and port 
    datagramSocket.bind( localPort, localIP ); 

    //Listen for incoming datagrams 
    datagramSocket.receive(); 

    //Create a message in a ByteArray 

} 

function dataReceived( event:DatagramSocketDataEvent ):void 
{ 
    //Read the data from the datagram 
    trace("Received from " + event.srcAddress + ":" + event.srcPort + "> " + 
        event.data.readUTFBytes( event.data.bytesAvailable ) );
        rcv.text = event.data.readUTFBytes( event.data.bytesAvailable )
} 



sendbtn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
var data:ByteArray = new ByteArray(); 
    data.writeUTFBytes(msg.text); 

    //Send the datagram message 
    datagramSocket.send( data, 0, 0, targetIP, targetPort); 

}

请帮帮我。

我想
ipto
是一个设置为“输入文本”的动态文本字段,但什么是
portto

如果它也是一个动态文本字段,您应该尝试从中获取字符串并将其转换为整数

var targetIP:String = ipto.text; 
var targetPort:int = (int)portto.text;  
还要确保检查
ipto
portto
是否是它们的实际实例名称,而不仅仅是它们的符号名称


我有时倾向于创建文本字段,而忘记选择实例名称。

为什么因为您没有调用
DatagramSocketExample()
函数。因此,它没有设置
addEventListener()
bind()
下面是一些精简的测试代码。绑定到localhost 127.0.0.1和同一端口,以便您可以看到它通过
dataReceived()
事件函数接收数据

import flash.display.Sprite;
import flash.events.DatagramSocketDataEvent;
import flash.events.Event;
import flash.net.DatagramSocket;
import flash.utils.ByteArray;

var datagramSocket: DatagramSocket;
var localIP: String = "127.0.0.1";
var localPort: int = 1;
var targetIP: String = "127.0.0.1";
var targetPort: int = 1;

datagramSocket = new DatagramSocket();
datagramSocket.addEventListener(DatagramSocketDataEvent.DATA, dataReceived);
datagramSocket.bind(localPort, localIP);
datagramSocket.receive();

var data: ByteArray = new ByteArray();
data.writeUTFBytes("Test data");
datagramSocket.send(data, 0, 0, targetIP, targetPort);

function dataReceived(event: DatagramSocketDataEvent): void {
    trace("Received from " + event.srcAddress + ":" + event.srcPort + "> " + event.data.readUTFBytes(event.data.bytesAvailable));
}

错误告诉您,您正在尝试访问某个对象的属性或方法,该对象假定为对象,但实际上为null。未初始化或从未对对象进行过初始化。你有没有确认里面所有的物品都是应该的?我看不出
msg
设置在哪里,因此调用
.text
可能是个问题。Ok msg是一个带有text的文本输入字段请原谅,我实际上没有这样做,这些只是建议。我假设
frame1:64
意味着这个页面的第64行,也假设您已经发布了整个文件,第64行是您添加事件侦听器的地方。在此文件中,我看不到您在哪里导入或声明
MouseEvent
,因此调用
MouseEvent.CLICK
可能是您的问题?感谢您的帮助,这里是鼠标单击发送btn.addEventListener(MouseEvent.CLICK,fl_MouseClickHandler);函数fl_MouseClickHandler(事件:MouseEvent):void{}。假设它是第64行是正确的;开关是datagramSocket.send(数据,0,0,targetIP,targetPort),根据我看过的每一件事,这应该行得通。但我所得到的只是它告诉我,行中的某些内容是空的。是的,很抱歉,就像我说的,我真的不知道,我会对所有的对象进行bug测试,确保它们被设置,并且它们的值是预期的。如果你找到一个不是,我敢打赌那是你的错误。对不起,我帮不上忙了。嗨,Portto是一个数字步进器。我确实知道这就是他们的名字,我只是不明白为什么它总是告诉我第67行中的引用是空的,而“datagramSocket.send(data,0,0,targetIP,targetPort);”数据不是空的,“targetIP,targetPort”被填入,而“0,0,”n是每个示例都说要做的。我甚至尝试过放置“data.writeUTFBytes(“Test”);”,但没有任何效果。