Die Demo ist gerade fertig, ich ging direkt zum Thema. Ich habe zwei Threads geöffnet, um die Kommunikation zwischen dem Socket -Server und dem Client zu simulieren, und die Daten in eine angegebene Formatmeldung zum Senden eingefasst
Code:
Importieren Sie java.io.ioxception; import java.io.inputstream; import java.io.outputstream; importieren java.net.inetaddress; import java.net.serversocket; import Java.net.socket; Import Java.net.UnnownHostException; */public class CustomData {public static void main (String args []) {// Server -Thread neuer Thread (neuer Runnable () {@Override public void run () {try {// Öffnen Sie den Server -Socket -ServerSocket Servers serversocket = new serversocket (9000); // auf den client, socket -scetket = serverstream). // Die ersten beiden Bytes als Nachrichtenlänge [] Lenbytes = neuer Byte [2]; InputStream.read (CRC); Pass) if (crc32 == GetCrc32 (Bytes)) {System.out.println ("CRC32 Right!"); Integer.ParseInt (Bytetohex (Bytes [1]), 16); } // die verbleibenden Datenbytes abrufen und die Daten ausführen. inputStream.close (); // Client -Thread neuer Thread (neuer Runnable () {@Override public void run () {try {// Verbinde den Server -Socket = neuer Socket (Getipaddress (), 9000); outputStream outputStream = Socket. Daten, Länge); } /** *Encapsulate and send messages*The message format is {Total message length [2 bytes], Crc32 check code [4 bytes], ver version information [1 byte], cmd instruction [1 byte], data data content [several bytes]} */ private static void pack(OutputStream out, byte cmd, byte[] data, int len) { try { //First get the total length of the Meldung, wie oben erwähnt, fügen Sie die Bytes zum Format kurzer Sumalize = (kurz) (2 + 4 + 1 + 1 + len) hinzu; // Ausgabe der Nachrichtenlänge aus. // das Feld, das Byte [] Bytes = neues Byte [1 + 1 + len] überprüft werden muss; int index = 0; Bytes [index ++] = 0x05; // Versionsnummer (dies wird hier tot geschrieben) Bytes [index ++] = cmd; // cmd Anweisung // Dateninhalt für (int i = 0; i <len; i ++) {Bytes [index ++] = Daten [i]; } // Erhalten Sie den CRC32 -Verifizierungscode für Ver, CMD und Daten (CRC32 -Algorithmus ist ganz unten, online gefunden ...) Byte [] crc32 = inttobytes (getCrc32 (Bytes)); // Ausgabe von CRC Check Code out.write (CRC32, 0, CRC32.Length); // Ausgabe ver, cmd, Data out.write (Bytes, 0, bytes.length); } catch (ioException e) {e.printstacktrace (); }} / ** * Die native IP * / private statische String -Getipaddress () löscht UnbekannteHostException {Inetaddress address = inetaddress.getLocalHost (); Rückgabeadresse.GethostadDress (); } / ** * int zu byte [] * / public static byte [] inttobytes (int value) {byte [] bytes = new Byte [4]; Bytes [3] = (Byte) (Wert >> 24); Bytes [2] = (Byte) (Wert >> 16); Bytes [1] = (Byte) (Wert >> 8); Bytes [0] = (Byte) (Wert >> 0); Rückkehr Bytes; } / ** * kurz zu byte [] * / public static byte [] ShortTobyte (kurzer Wert) {byte [] bytes = new byte [2]; Bytes [1] = (Byte) (Wert >> 8); Bytes [0] = (Byte) (Wert >> 0); Rückkehr Bytes; } / *** byte zu hexadezimal* / public static String bytetohex (Byte b) {int i = b & 0xff; return Integer.tohexString (i); } / ** * byte [] to int * / public static int byTestoint (byte [] bytes) {return (int) (((((Bytes [3] & 0xff) << 24) | ((Bytes [2] & 0xff) << 16) | ((bytes [1] & 0xff) << 8) | / *** byte [] zu kurz* / public static Short ByTestoshort (Byte [] Bytes) {return (kurz) ((Bytes [1] << 8) | Bytes [0] & 0xff); 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xB6662D3D, 0x76dc4190, 0x0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111. 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x8208f4c1, 0xf50fc457, 0x8208f4c1, 0xf50fc457, 0x8208, 0xf50fc457, 0x8208, 0xf50fc457, 0x8208, 0xf50fc457, 0x8208, 0xf50fc457, 0x8208, 0xf50fc457, 0x8208, 0xf50fc457, 0x82. 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61E49f, 0x5edef90e, 0xce61e49f, 0x5tef90E, 0x2998 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xE40ECF0B, 0x9309FF9D, 0x0a00Ae27, 0x79Eb1, 0x0a00Ae27, 0x79EB1 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8Ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bbb67f1, 0xAndff252, 0xd1bbb67f1, 0xAndff252, 0xd1bbb67f1, 0x4fdff252, 0xd1bbb67f1, 0xa6767. 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 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, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65Adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xDebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0xbdbdf21c, 0xcabac28a, 0xbdbdf21c, 0xcabac28a, 0xbdbdf21c, 0xcabac28a, 0xbdbdf21c, 0xcabac28a, 0xbdbdbdf21c, 0xcabac28a, 0xbdbdbdf21c, 0xcabac28a, 0xbdbdbdf21c, 0xcabac28a, 0xbdbdbdf21c, 0xcabac28a, 0xb39330 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,};Auslaufergebnisse:
Das obige Beispiel für das Hinzufügen von CRC32 -Verifizierung in der Kapselung von Java Custom Protocol Paket ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.