字节数组读取

时间:2014-04-28 09:00:07

标签: java sockets

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

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
}

服务器似乎在该行被阻塞以读取字节数组的长度。我真的需要帮助解决这个问题

2 个答案:

答案 0 :(得分:1)

写入数据后,刷新输出:

        dOut.writeInt(data.length); // byte array created above
        dOut.write(data);  
        dOut.flush();

或者,关闭流(如果您不打算再次使用它)......

        dOut.writeInt(data.length); // byte array created above
        dOut.write(data);  
        dOut.close();

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

答案 1 :(得分:0)

您正在向套接字打印“3”,但您永远不会阅读它。因此,当你执行readInt()时,你会读取“3”和行终止符。

不要在同一个套接字上混合多个流/写入器。在插座的使用寿命中使用相同的插座。