Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Java套接字接收的字节数超出预期_Java_Sockets_Datainputstream - Fatal编程技术网

Java套接字接收的字节数超出预期

Java套接字接收的字节数超出预期,java,sockets,datainputstream,Java,Sockets,Datainputstream,我刚开始使用Java,正在尝试通过TCP/IP与外部设备通信。我向设备发送命令并收到相应的响应 如果我在发送和接收之间等待1秒,那么通信到目前为止仍然有效。让我恼火的是,接收到的数据比预期的长7字节。在响应之前总是字节2A 48 45 4C 4C 4F 2A 我希望有人能告诉我为什么这是错误的,如果我做错了什么 Socket socket = new Socket("192.168.0.40", 80); byte[] ba_sendBuffer = new byte[1024

我刚开始使用Java,正在尝试通过TCP/IP与外部设备通信。我向设备发送命令并收到相应的响应

如果我在发送和接收之间等待1秒,那么通信到目前为止仍然有效。让我恼火的是,接收到的数据比预期的长7字节。在响应之前总是字节2A 48 45 4C 4C 4F 2A

我希望有人能告诉我为什么这是错误的,如果我做错了什么

    Socket socket = new Socket("192.168.0.40", 80);

    byte[] ba_sendBuffer = new byte[1024];

    // fill sendBuffer

    DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());

    dOut.writeInt(ba_sendBuffer.length); // write length of the message
    dOut.write(ba_sendBuffer);           // write the message
    dOut.flush();

    // Wait for device
    Thread.sleep(1000);

    byte[] ba_responseBuffer = new byte[0];

    if (socket.isConnected())
    {
        InputStream inFromServer = socket.getInputStream();
        DataInputStream in = new DataInputStream(inFromServer);

        synchronized (in)
        {
            int length = in.available();
            ba_responseBuffer = new byte[length];

            in.readFully(ba_responseBuffer);
        }

        // ba_responseBuffer - the first 7 bytes are not expected
        // work with the response
    }

问题解决了。我刚收到一位同事的答复。我通过WIFI连接到设备,打开连接时模块总是发送一个“你好”。问题已经解决。

2A 48 45 4C 4C 4F 2A
是ASCII格式的
*HELLO*
。我猜您忘记了一些测试代码……在发送消息之前发送缓冲区的长度,也许有答案。@DenysSéguret:您好,这是对的,但为什么呢?我的代码中没有“你好”这个词。我用Wireshark分析了数据,发现该设备的响应中没有包含“HELLO*@MladenSavić”:命令没有任何效果。我刚收到一位同事的回答,她真的很愚蠢。我通过WIFI连接到设备,打开连接时模块总是发送一个“你好”。问题已经解决了。非常感谢你的帮助…一位同事和她真的很愚蠢。。。她的Stackoverlow用户名是什么?我猜你的意思是这个问题很糟糕,而不是说你的同事很愚蠢。@SvetlinZarev:对不起。你说得对。问题是愚蠢的/蹩脚的,不是我的同事。“语言的精确性”;-)