Actionscript 3 UDP数据报套接字未通过并给出null错误
我有一个UDP套接字程序,在脚本3中使用flash CS6编译的Adobe Air,我一直收到一个错误 TypeError:错误#1009:无法访问空对象引用的属性或方法。 在Untitled_fla::MainTimeline/fl_MouseClickHandler()[Untitled_fla.MainTimeline::frame1:64] 这是我的密码: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
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”);”,但没有任何效果。