I have a UDP socket program in Action Script 3 with Adobe Air compiled in flash CS6 and I keep receiving an error
TypeError: Error #1009: Cannot access a property or method of a null object reference. at Untitled_fla::MainTimeline/fl_MouseClickHandler()[Untitled_fla.MainTimeline::frame1:64]
here is my code:
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);
}
Please help me.
why? - because you haven't called the DatagramSocketExample()
function. so it didn't setup the addEventListener()
and bind()
here is some stripped down test code that works. binds to localhost 127.0.0.1 and the same port so you can see it receiving the data through the dataReceived()
event function.
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));
}