gpt4 book ai didi

java - 闪存套接字未正确读取 Java 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:22 26 4
gpt4 key购买 nike

由于 Javascript 本身没有任何通过原始套接字进行通信的功能,我决定使用 Java applet - 如果用户在他的浏览器上禁用了 java applet,则可以使用 flash 套接字桥与 Javascript 集成.我都试过 jsxmlsocket以及haxejssocket却面临同样的问题

现在,服务器应用程序是用 Java 编写的,并且通过 Java 小程序可以正常通信。但是在 flash 上,似乎有问题。

flash 收到的第一个文本是对 的响应,允许访问所有域和端口。这工作正常,因为套接字开始通信

这是在收到数据时运行的 Javascript 代码:

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

现在,问题来了。 的响应被发送后,又发送了 5 行文本。当然,预期的是我会看到 5 个警告框,其中包含发送的文本。事实似乎并非如此。相反,我看到的是 5 个装箱的警报,其中包含对 的响应。似乎正在发送某些内容,因为 OnData 函数似乎在正确的时间触发,但出于某种原因,数据似乎是发送给它的第一行文本。

负责发送数据的 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 applet 等其他客户端中运行良好。

更新:不,这不是 this question 的副本.我的问题与仅返回对 <policy-file-request/> 的响应的脚本有关在每个 onData称呼。过程中没有抛出“错误”。

最佳答案

据我所知,这看起来像是某种内部兼容性问题。您的代码看起来不错,这意味着代码与运行它的软件版本之间一定存在某种不兼容,从而导致问题。

这是一个相当牵强的猜测,但它看起来是这里唯一可能真正导致该错误的东西

关于java - 闪存套接字未正确读取 Java 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com