【发布时间】:2012-05-18 14:50:22
【问题描述】:
由于 Javascript 本身不具备通过原始套接字进行通信的任何功能,因此我决定使用 Java 小程序 - 如果用户在其浏览器上禁用了 Java 小程序,则可以将 Flash 套接字桥与 Javascript 集成.我试过jsxmlsocket 和haxejssocket 都遇到同样的问题
现在,服务器应用程序是用 Java 编写的,并且可以通过 Java 小程序进行通信。但是在 flash 上,好像有问题。
flash 收到的第一个文本是对
这是接收数据时运行的 Javascript 代码:
socket.onData = function(data) {
alert(data);
parse(data);
}
现在,问题来了。发送
负责发送数据的Java线程:
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;
}
}
};
要发送数据,调用发送函数:
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
}
}
如您所见,所有发送的数据都以空字节或 \0 结尾。也许这是负责任的?
注意:我想在这里强调一下,我熟悉 websockets 以及它们如何“更合适”,所以请不要这么建议。
如前所述,它在 Telnet 和 Java 小程序等其他客户端中运行良好。
更新:不,这不是 this question 的副本。我的问题与在每次 onData 调用时仅返回对 <policy-file-request/> 的响应有关的脚本有关。过程中没有抛出“错误”。
【问题讨论】:
-
这是图书馆的一部分。如果您希望查看该代码,请转到顶部这两个链接之一上的那些链接。问题说 flash 是因为 flash 处理通信,而不是我编写了 flash 代码或知道如何
-
如前所述,两者似乎都有我上面描述的相同问题。而且由于两者都给出了同样的问题,我认为这是我的 javascript 或 java 出了问题,而不是 flash 本身,因为其他人似乎在使用这些库时没有任何问题
-
是的,所以我们回到我原来的问题:为什么它不起作用呢? Java似乎做得对,因为它与其他客户端一起工作,所以js或flash肯定有问题。或者甚至可能是行尾,因为我听说闪存在每行结束时的套接字有问题,
-
等一下,我现在不在家。我到家后第一件事就试试。
-
我格式化了脚本以匹配其余代码的上下文,但 JS 似乎给出了一些错误。我对 JS 不是很擅长,所以我不能自己调试它
标签: java javascript flash sockets