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 - Fatal编程技术网

Java 字节数组读取

Java 字节数组读取,java,sockets,Java,Sockets,我在从客户端到服务器读取字节数组时遇到了一个问题。客户端实际上写入了所有字节,但服务器似乎无法读取。以下是客户端和服务器端的代码 Socket sock = new Socket(Interface.SERVER_IP, 4444); PrintStream os = new PrintStream(sock.getOutputStream()); os.println("3"); DataOutputStream dOut = new DataOutputStream(sock.getOut

我在从客户端到服务器读取字节数组时遇到了一个问题。客户端实际上写入了所有字节,但服务器似乎无法读取。以下是客户端和服务器端的代码

Socket sock = new Socket(Interface.SERVER_IP, 4444);
PrintStream os = new PrintStream(sock.getOutputStream());

os.println("3");
DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());

dOut.writeInt(data.length); // byte array created above
dOut.write(data); 
服务器端是:

DataInputStream clientData = new DataInputStream(clientSocket.getInputStream());
int length = clientData.readInt();
System.out.println(length);
byte[] data = new byte[length]; // read length of incoming message
if(length>0) {
    clientData.readFully(data, 0, data.length); // read the message
}

服务器似乎在读取字节数组长度的行被阻塞。请告诉我,我确实需要帮助来解决此问题。

在写入数据后,刷新输出:

        dOut.writeInt(data.length); // byte array created above
        dOut.write(data);  
        dOut.flush();
或者,关闭流(如果您不打算再次使用它)

还请注意,PrintWriter正在打印字符串值(“3”)。您正在向流中打印额外的数据,而这些数据在服务器上似乎没有被消耗。

您正在向套接字打印“3”,但从未读取它。因此,当您执行readInt()时,您将读取“3”和一个行终止符


不要在同一个套接字上混合使用多个流/写入程序。在套接字的生命周期中使用相同的代码。

如果您将问题中的代码格式化为至少更具可读性一点,该怎么办?为什么要这样做<代码>PrintStream os=新的PrintStream(sock.getOutputStream());os.println(“3”)???
        dOut.writeInt(data.length); // byte array created above
        dOut.write(data);  
        dOut.close();