I am trying to connect with a python server (from my colleague), with java. The aim (for now) is to send a json array. We start by sending the length first. It works with an equivalent python client, which I am trying to translate into python.
This is an excerpt from my java code
  PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
   long length = (long) arraytosend.length();
   out.print(length);
   String arraytosend = new JSONArray(test2).toString(); 
   out.println(new JSONArray(test2).toString());
The python server first reads the length like this (I just copied the relevant commands de):
  N_BYTES_MSG_LEN = 8
    raw_len = connection.recv(N_BYTES_MSG_LEN)
    # here it output 51 as raw_len
  try:
        msg_len = struct.unpack(MSG_LEN_TYPE, raw_len)[0]
        print msg_len
        logger.debug('announced message length: {}'.format(msg_len))
    except:
        logger.warning('could not interpret message length')
        return None
    # read the incoming message
    raw_data = connection.recv(msg_len)
    if len(raw_data) < msg_len:
        logger.info('lost connection')
        return None
After the "51" it immediately goes to lost connection.
The python client code (which I am trying to translate into java), works like this:
try:
        raw_data = json.dumps(dict(data=data))
    except:
        logger.warning('Failed to create a json representation of the data')
        return False
    # TODO: this could fail for *very* large objects
    raw_len = struct.pack('Q', len(raw_data))
    try:
        connection.sendall(raw_len)
        connection.sendall(raw_data)
    except Exception:
        logger.warning('lost connection while sending data')
        raise
 
     
    