Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

flash socket not reading from Java Server properly

Since Javascript does not have any functionality by itself to communicate over raw sockets , I decided to use a Java applet - and on the event that the user has disabled java applets on his browser , a flash socket bridge to be integrated with Javascript. I have tried with both jsxmlsocket as well as haxejssocket only to face the same problem

Now , the server application is written in Java and communication works fine over the java applet. But on flash , there seems to be a problem.

The first text that flash recieves is the response to <policy-file-request/> allowing access to all domains and ports. This works fine , since the sockets start to communicate

Here is the Javascript code that runs when data is received:

socket.onData = function(data) {
    alert(data);
    parse(data);
}

Now , here's the problem. After the response to <policy-file-request/> is sent , 5 more lines of text are sent. What is expected of course is that I will see 5 alert boxes with the text sent in it. That doesn't seem to be the case. What I see instead is 5 alert boxed with the response to <policy-file-request/> in it. It looks like something is being sent , cause the OnData function seems to firing off at the correct time , but for some reason , the data seems to be the first line of text sent to it.

Java thread that takes care of sending data:

LinkedBlockingQueue<String> outQueue=new LinkedBlockingQueue<String>(1000);
public Thread checkSendLoop=new Thread(){ //this is done to cramp everything in one file. Also more neater
    public void run(){
        try{
            OutputStream out=socket.getOutputStream();
            while (true){
                String mes=outQueue.take();
                mes=mes.replace("\n", "").replace("\r", ""); //for safety
                mes=mes+"\0"; //append
                out.write(mes.getBytes());
                out.flush();
            }
        }
        catch (Exception e){
            System.out.println("FATAL : Data to a client will not be sent anymore."); //probably a socket close threw the exception
            outQueue.clear();
            outQueue=null;
        }
    }
};

To send data , a send function is called:

public void send(String s){
    Queue<String> testQueue = outQueue;
    s=s+" "+getUnixTime();
    if (testQueue!=null){
        System.out.println("SENDING "+nick+" - "+s);
        testQueue.add(s); //just add to the queue , the check loop will make sure that its sent
    }
}

As you can see , all data sent ends with a null byte or \0. Maybe this is responsible?

NOTE: I want to emphasize here that I am familiar with websockets and how they would be "much more appropriate" , so please do not suggest that.

As mentioned earlier , it works fine in other clients like Telnet and the Java applet.

Update: No, this is not a duplicate of this question. My problem has to do with the script returning only the response to <policy-file-request/> on every onData call. There is no "error" thrown in the process.

like image 565
EnKrypt Avatar asked Dec 11 '25 02:12

EnKrypt


1 Answers

From what I can see , this looks like some sort of internal compatibility issue. Your code seems fine , so that means that there must be some sort of incompatibility between the code and the version of the software that's running it , thus causing a problem.

Its a pretty far fetched guess but it looks like the only thing here that could actually cause that error

like image 63
William Avatar answered Dec 12 '25 16:12

William



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!