Comunicacion Server en C y Cliente en Java

TaiCHoKe

Seguramente esto sea una chorrada pero me estoy volviendo loco ya.

Es comunicacion mediante sockets.

Por lo que tengo entendido:
Big Endian = Network Order
asique hasta ahi creo que lo tengo bien.

Tengo que recibir un int enviado por java, con lo que logicamente uso ntohl, que lo convierte a unsigned pero no veo problema porque el numero nunca es negativo ni se sale del rango del long de java.

Servidor:

 u_int file_size;
            printf("Size of long %ldn", sizeof(u_int));
            while(received == -1)
            {
                received = recv(*sd2, &file_size,sizeof(u_int) ,0);
            }
            u_int aux = ntohl(file_size);
            printf("File size is: %dn",aux);

Cliente:


      SocketChannel schannel = SocketChannel.open(direccion);
        ByteBuffer bb = ByteBuffer.allocate(500);
       ---
       ----
       ------
        bb.clear();
        bb.order(ByteOrder.BIG_ENDIAN);
        bb.putInt(fileSize);
        bb.put(0, (byte)0);
        bb.flip();
        System.out.println(bb.toString());

        numwritten = 0;
        while(numwritten == 0)
        {
            numwritten = schannel.write(bb);
        }

No se lo que le pasa al código, pero no me recibe los valores correctamente. ¿Algun iluminado?

elkaoD

No tienes que pasarlo a big endian creo.

Java manda el int signed (si es un int normal, que creo que sí) así que lo tienes que descifrar signed.

Usuarios habituales

  • elkaoD
  • TaiCHoKe