Pregunta

Estoy tratando de hacer una petición tcp en Java para un TCP existente servidor que ya está disponible.la especificación de la interfaz es:

Field           Length      Type
Length          2 bytes     16-bits binary
Message ID      1 byte      8-bits binary
MSGTYPE         1 byte      8-bits binary
Variable1       4 bytes     32-bits binary
Variable2       30 bytes    ASCII
Variable3       1 byte      8-bits binary

Entiendo cómo convertir una Cadena a Binario usando BigInteger.

String testing = "Test Binary";
byte[] bytes = testing.getBytes();
BigInteger bi = new BigInteger(bytes);
System.out.println(bi.toString(2));

Mi Entendimiento es que si yo quería hacer una petición TCP en primer lugar

  1. necesidad de convertir binario a una cadena
  2. añadir los valores a un StringBuffer.

Por desgracia, mi entendimiento es limitado, así que yo quería un poco de asesoramiento en la creación de la petición TCP correctamente.

¿Fue útil?

Solución

No usaría cadena (como tiene datos binarios), StringBuffer (siempre), o Biginteger (ya que no es lo que está diseñado).

Suponiendo que tiene una secuencia de datos de Big Endian I usaría DataOutputStream

DataOutptuStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));

out.writeShort(length);
out.write(messageId);
out.write(msgtype);
out.write((var1+"\0\0\0\0").substring(0, 4).getBytes("ISO-8859-1"));
out.write(var2.getBytes("ISO-8859-1"));
out.write(var2);

out.flush(); // optionally.

Si tiene un pequeño protocolo de endian, debe usar ByteBuffer en cuyo caso usaría un bloqueo de NIO SOCHATCHANNEL.

Por cierto, usaría ISO-8859-1 (bytes de 8 bits) en lugar de US-ASCII (bytes de 7 bits)

Otros consejos

Usted va en la dirección equivocada.El hecho de que la especificación de mensaje indica que, por ejemplo, el primer campo es de 16 bits binario, no significa que usted va a enviar una cadena binaria.Usted acaba de enviar un (unsigned?) Número de 16 bits que será, como cuestión de hecho, codificada en binario, ya que la representación interna puede ser que uno.

Al escribir sobre un socket a través de un DataOutputStream como en

int value = 123456;
out.writeInt(value);

usted ya está escrito en binario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top