user3429848
user3429848

Reputation: 1

Byte array reading

I have a problem with writing an reading an array of bytes from client to server. The client actually writes all the bytes but the server does not seem to be able to read it. Here is the code for the client and server sides

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); 

and the server side is:

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
}

The server seems to be blocked at the line to read the length of the byte array. Please I really need help solving this

Upvotes: 0

Views: 60

Answers (2)

user207421
user207421

Reputation: 311039

You're printing "3" to the socket but you're never reading it. So when you do readInt(), you're reading the "3" and a line terminator instead.

Don't mix multiple streams/writers on the same socket. Use the same ones for the life of the socket.

Upvotes: 0

xagyg
xagyg

Reputation: 9721

After you write the data, flush the output:

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

Alternatively, close the stream (if you aren't going to use it again)...

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

Also note that your PrintWriter is printing a string value (of "3"). You are printing extra data to the stream that doesn't seem to get consumed on the server.

Upvotes: 1

Related Questions