La demostración acaba de terminar, fui directamente al tema. Abrí dos subprocesos para simular la comunicación entre el servidor de socket y el cliente, y encapsé los datos en un mensaje de formato especificado para enviar
Código:
import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.inetaddress; import java.net.serversocket; import java.net.socket; import java.net.unknownhostexception;/*** creado por Sikang en 2016/4/29. */public class CustomData {public static void main (string args []) {// servidor hilo nuevo hilo (new runnable () {@Override public void run () {try {// abre el servidor Serversocket Server = new Serversocket (9000); // Esperando el cliente a conectar socket = sercept.accept (); InputStream Servidor = socket. socket. socket.getin. Primero dos bytes como la longitud del mensaje [] LenBytes = New Byte [2]; bytestint (CRC); getCrc32 (bytes) {System.out.println ("CRC32 Right!"); Integer.ParseInt (bytetohex (bytes [1]), 16); // Obtenga los bytes de datos restantes y elimine los datos intshalen = longitud - 2 - 4 - 1 - 1; inputStream.Close (); // Client Thread New Thread (new runnable () {@Override public void run () {try {// Conecte el servidor socket socket = new Socket (getIpAdDress (), 9000); outputStream outputStream = Socket.getOutputPutStream (); Stry Str = "Hellow World!"; Byte [] data = str.TegetByByByByByTes (); // Send Packet (OutputStream, (OutputStream, (HELLOW! " data, data.length); } /***Encapsular y enviar mensajes*El formato de mensaje es {Longitud total del mensaje [2 bytes], CRC32 Verifique el código [4 bytes], la información de la versión ver [1 byte], cmd instrucción [1 byte], contenido de datos de datos [varios bytes]}* /private static void paquete (salida de salida, byte cmd, byte [] data, int l len) {prueba {prueba {prueba Mensaje, como se mencionó anteriormente, agregue los bytes al formato corto TotalSize = (corto) (2 + 4 + 1 + 1 + len); // La longitud del mensaje de salida out.write (ShortTobyte (TotalSize), 0, 2); // El campo que debe verificarse byte [] bytes = nuevo byte [1 + 1 + len]; int index = 0; bytes [index ++] = 0x05; // número de versión (esto está escrito aquí) bytes [index ++] = cmd; // cmd instrucción // contenido de datos para (int i = 0; i <len; i ++) {bytes [index ++] = data [i]; } // Obtenga el código de verificación CRC32 para ver, CMD y datos (el algoritmo CRC32 está en la parte inferior, encontrado en línea ...) byte [] CRC32 = inttobytes (getCrc32 (bytes)); // Salida CRC Verifique Code Out.Write (CRC32, 0, CRC32.Length); // Salida Ver, CMD, Data Out.Write (bytes, 0, bytes.length); } catch (ioException e) {E.PrintStackTrace (); }} / ** * Obtenga la cadena nativa de ip * / privada static getIpAddress () lanza desconocidaHosTexception {inetAddress dirección = inetaddress.getLocalHost (); Dirección de retorno.getHostAddress (); } / ** * int to byte [] * / public static byte [] inttobytes (int value) {byte [] bytes = new byte [4]; bytes [3] = (byte) (valor >> 24); bytes [2] = (byte) (valor >> 16); bytes [1] = (byte) (valor >> 8); bytes [0] = (byte) (valor >> 0); bytes de devolución; } / ** * corto a byte [] * / public static byte [] shorttobyte (valor corto) {byte [] bytes = new byte [2]; bytes [1] = (byte) (valor >> 8); bytes [0] = (byte) (valor >> 0); bytes de devolución; } / *** byte a hexadecimal* / public static string bytetohex (byte b) {int i = b & 0xff; return integer.tohexstring (i); } / ** * byte [] to int * / public static int / *** byte [] to short* / public static short byTESTOSHORT (byte [] bytes) {return (short) ((((bytes [1] << 8) | bytes [0] & 0xff)); 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0Edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d988888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888N 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c691055e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbbc9d6, 0xacbcf940, 0x32d8332d832d832d832d832d832d832d8 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xbda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611111dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d2d 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bbeb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad6788846, 0xda60b8d0, 0x44042d73, 0x333331De5, 0xa4c5f5f5f5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c98, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedB88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead5473339739739739739739739739739739739739739739739739739739739739739739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aaaa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00e27, 0x7d079eB1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10. 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc577777777777777777777777777777777777777777777777777. 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60eFc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcbb3cb3c. 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cbbbb36a04 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b747777, 0x888085ee6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659ft 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa76726661, 0xd06016f7, 0x4969474d, 0x33e77dbdb, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b3330330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c30c 0x5a05df1b, 0x2d02ef8d,};Resultados de ejecución:
El ejemplo anterior de agregar verificación CRC32 en la encapsulación del paquete de protocolo Custom Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.