Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自JavaScript Websocket的InputStream Java是';我没有收到完整的信息_Javascript_Java_Websocket_Inputstream - Fatal编程技术网

来自JavaScript Websocket的InputStream Java是';我没有收到完整的信息

来自JavaScript Websocket的InputStream Java是';我没有收到完整的信息,javascript,java,websocket,inputstream,Javascript,Java,Websocket,Inputstream,我有以下设置: Index.html(网页) var-ws; 函数WebSocketTest() { 如果(“窗口中的WebSocket”) { log(“您的浏览器支持WebSocket!”); //让我们打开一个web套接字 ws=newwebsocket(“ws://localhost:6790/”; ws.onopen=函数() { //已连接Web套接字,请使用send()发送数据 发送(“你好,世界!”); 日志(“消息已发送…”); }; ws.onmessage=函数(evt)

我有以下设置: Index.html(网页)


var-ws;
函数WebSocketTest()
{
如果(“窗口中的WebSocket”)
{
log(“您的浏览器支持WebSocket!”);
//让我们打开一个web套接字
ws=newwebsocket(“ws://localhost:6790/”;
ws.onopen=函数()
{
//已连接Web套接字,请使用send()发送数据
发送(“你好,世界!”);
日志(“消息已发送…”);
};
ws.onmessage=函数(evt)
{ 
收到的var_msg=evt.data;
日志(“收到消息…”);
};
ws.onclose=函数(事件)
{ 
var原因;
//websocket已关闭。
console.log(事件代码);
console.log(“关闭”)
}
ws.onerror=函数(evt)
{
控制台日志(evt);
}
}
其他的
{
//浏览器不支持WebSocket
log(“您的浏览器不支持WebSocket!”);
}
}
Java套接字服务器

private String decodeMessage(InputStream in) {
    Main.debug(in + "");
    try { 
        in.skip(2);
        ArrayList<Byte> keys = new ArrayList<Byte>();
        for(int i = 0; i < 4; i++){
            int r = in.read();
            Main.debug("added: " + r);
            keys.add((byte) r);
        }

        ArrayList<Byte> encoded = new ArrayList<Byte>();
        for(int i = 0; i < in.available(); i++){
            int r = in.read();
            Main.debug("added2: " + r);
            encoded.add((byte) r);
        }

        ArrayList<Byte> decoded = new ArrayList<Byte>();
        for(int i = 0; i < encoded.size(); i++){
            decoded.add((byte) (encoded.get(i) ^ keys.get(i & 0x3)));
            Main.debug("Decoded: " + (encoded.get(i) ^ keys.get(i & 0x3)));
        }

        Main.debug("Total: " + decoded);
        String s = new String(toByteArray(decoded), "US-ASCII");
        Main.debug("Text: " + s);

    } catch(IOException e) {

    }

    return null;
}       

public static byte[] toByteArray(List<Byte> in) {
    final int n = in.size();
    byte ret[] = new byte[n];
    for (int i = 0; i < n; i++) {
        ret[i] = in.get(i);
    }
    return ret;
}
私有字符串解码消息(InputStream in){
Main.debug(在+“”)中;
试试{
in.跳过(2);
ArrayList键=新的ArrayList();
对于(int i=0;i<4;i++){
int r=in.read();
主调试(“添加:”+r);
添加((字节)r);
}
ArrayList encoded=新的ArrayList();
对于(int i=0;i
问题是消息get通过得很好,但是我将其作为输出 (除了“添加”和“解码”调试消息

[19:42:02信息]:总计:[7210110810811195] [19:42:02信息]:文本:你好

所以,即使我用空格代替uu,“世界!”也会丢失。 有什么是我忽略的吗

我希望有人能给我一个提示。
提前感谢!

然后将其转换为DataInputStream

while(datainputstream.available() > 0){
     ....
}
似乎可以解决它!
感谢@Tinus帮助我获得此解决方案!

然后将其转换为DataInputStream

while(datainputstream.available() > 0){
     ....
}
似乎可以解决它!
感谢@Tinus帮助我找到这个解决方案!

使用
available()
不是从
InputStream
读取所有数据的可靠方法@Titus还有什么替代方法?您可以从
InputStream
中读取数据,直到到达文件
EOF
的末尾,或者直到读取整个消息。第二个选项是(直到整个消息被读取)取决于您使用的协议,如果您想自己实现
websocket
协议,您必须阅读文档以了解其工作原理。在我看来,您应该使用一个实现
websocket
协议的库。您应该看看这个:@Tinus谢谢,您给了我解决方案,我实际上,我们必须使用DataInputStream和while(dis.available()),现在它完全可以工作了。谢谢!使用
available()
不是从
InputStream
读取所有数据的可靠方法@Titus替代方法是什么?您可以从
InputStream
读取数据,直到到达文件
EOF
的末尾或直到读取整个消息。第二个选项(直到读取整个消息)取决于您使用的协议,如果您想自己实现
websocket
协议,您必须阅读文档以了解其工作原理。在我看来,您应该使用一个实现
websocket
协议的库。您应该看看这个:@Tinus谢谢,您给了我解决方案,我实际上必须使用DataInputStream和while(dis.available())来完成。现在它完全可以工作了。谢谢!