Demo baru saja selesai, saya langsung pergi ke topik. Saya membuka dua utas untuk mensimulasikan komunikasi antara server soket dan klien, dan merangkum data ke dalam pesan format yang ditentukan untuk dikirim
Kode:
Impor java.io.ioException; impor java.io.inputstream; impor java.io.outputstream; impor java.net.inetaddress; import java.net.serversocket; import java.net.socket; ciptakan sun.net. */kelas publik CustomData {public static void main (string args []) {// server utas utas baru (runnable baru () {@Override public void run () {coba {// buka klien server server socket = server.accept (9000); // tunggu klien untuk menghubungkan socket socket socketer. server.accepteam (9000); // tunggu klien untuk menghubungkan socket socket socketer. // Dapatkan dua byte pertama sebagai byte panjang pesan [] lenbytes = byte baru [2]; InputStream.read (CRC); dapat lewat) if (crc32 == getCrc32 (bytes)) {System.out.println ("CRC32 benar!") Integer.parseint (bytetohex (bytes [1]), 16); // Dapatkan byte data yang tersisa dan ambil data int data = panjang - 2 - 4 - 1 - 1 byte [] data = byte baru [datalen]; inputStream.close (); // utas klien utas baru (runnable baru () {@Override public void run () {try {// Sambungkan soket server = soket baru (getIpaddress (), 9000); outputStream outputStream = byte.getutsstream (); string string = "hellow world!"; Byte [] byte, str.getby (); string string = "hellow world!"; Byte [] byte = get.getes (); string string = "hellow world!"; Byte [] byte, str.getePSstream (); string string = "Hellow world!" 0xff, data.length); } /** *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 Pesan, seperti yang disebutkan di atas, tambahkan byte ke format short totalSize = (pendek) (2 + 4 + 1 + 1 + len); // output Panjang pesan out.write (shorttobyte (totalsize), 0, 2); // bidang yang perlu diperiksa byte [] bytes = byte baru [1 + 1 + len]; INT INDEX = 0; bytes [index ++] = 0x05; // Nomor versi (ini ditulis mati di sini) byte [index ++] = cmd; // instruksi cmd // konten data untuk (int i = 0; i <len; i ++) {bytes [index ++] = data [i]; } // Dapatkan kode verifikasi CRC32 untuk VER, CMD, dan data (algoritma CRC32 ada di bagian bawah, ditemukan secara online ...) byte [] crc32 = inttobytes (getCrc32 (bytes)); // output CRC Periksa kode out.write (CRC32, 0, CRC32.Length); // output ver, cmd, data out.write (bytes, 0, bytes.length); } catch (ioException e) {e.printstacktrace (); }} / ** * Dapatkan IP asli IP * / string statis privat getIpAddress () melempar UnknownHostException {inetaddress alamat = inetaddress.getLocalHost (); pengembalian alamat.gethostaddress (); } / ** * int ke byte [] * / public static byte [] inttobytes (nilai int) {byte [] bytes = byte baru [4]; bytes [3] = (byte) (nilai >> 24); bytes [2] = (byte) (nilai >> 16); bytes [1] = (byte) (nilai >> 8); bytes [0] = (byte) (nilai >> 0); Byte kembali; } / ** * pendek ke byte [] * / public static byte [] shorttobyte (nilai pendek) {byte [] bytes = byte baru [2]; bytes [1] = (byte) (nilai >> 8); bytes [0] = (byte) (nilai >> 0); Byte kembali; } / *** byte to hexadecimal* / public static string bytetohex (byte b) {int i = b & 0xff; return integer.tohexstring (i); } / ** * byte [] ke int * / public static int bytestoint (byte [] bytes) {return (int) ((((((bytes [3] & 0xff) << 24) | ((bytes [2] & 0xff) << 16) | (bytes [1] & 0xff) <) <8) | / *** byte [] untuk pendek* / public static pendek bytestoshort (byte [] byte) {return (pendek) (((bytes [1] << 8) | bytes [0] & 0xff)); 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0x0edb8832, 0x79dcb8a4, 0x0edb8832, 0x79dcb8a4, 0x0edb8832, 0x79dcb8a4) 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adadad47d47d, 0x6de4be41de, 0x1adadad47d, 0x6de4be41de, 0x1adadad47d, 0x6de, 0x6de, 0x1adad47d, 0x6de, 0x1ADAD47D47D, 0X6DE4BE41 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d08080d9, 0xfa0f3d63, 0x8d0808080d9, 0xfa0f3d63, 0x8D080808081 0xd56041e4, 0xA267172, 0x3c03e4d1, 0x4b04d447, 0xd20d8fd, 0xA50AB56B, 0X3B5B5A8FA, 0X4B2986C, 0XDBBBC9D9D6, 0X4B2986C, 0xDBBBC9D9D6, 0X4B2986C, 0xDBBBC9D9D6, 0X4B2986C, 0xDBBBC9D9D9D6, 0X4B2986C, 0XDBBC9D9D9D6, 0X4B2I986C, 0XDBBBC9D9D9D6, 0X4B2I986C, 0XDBBC9D9D9D6, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb662d3d, 0x76dc4190, 0xb6662d3d, 0x76dc4190, 0xb6662d3d, 0x76dc4190, 0xb6662d3d, 0x76dc4190, 0xb6662d3d, 0x76dc4190, 0xB6662D3D, 0X76DC4190 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818181818, 0x9609a88e, 0xe10e9818181818181818181818181818181818181818181818181818181818181 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3AB551CE, 0X4DB26158, 0x3AB551CE, 0X4DB26158, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0xda60b8d0, 0x444042d73, 0xda60b8d0, 0x444042d73, 0xda60b8d0, 0x444042d73, 0xda60b8d0, 0x444042d73, 0xda60b8d0, 0x4404042d73, 0xDA60B8D0, 0X4404042D732D732D73, 0XDA60B81 0xDD0D7CC9, 0X5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206f8b3, 0xb966d409, 0xce61e49f, 0xb966d409, 0xCE6E49F, 0xB96009, 0xCE6E49F, 0xB966D409, 0XCE6E49F, 0XB990 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40Ecf0b, 0x9309F9F9D 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0x38d8c2c4, 0x4fdff252, 0x38d8c2c4, 0x4fdff252, 0x38d8c2c4, 0x4fdff252, 0x38c2c4, 0x4fdff25, 0x38c2c4, 0x4fdff252, 0x38c2c4, 0x4FDFF252, 0x38D8C2C4, 0x4FDFF252, 0x38D8C2 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, 0X9C0C0C090606A9, 0X026D930A, 0X9C0C0906060606, 0X026D930A, 0X9C0C0906060606060606, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x666063bca, 0xff0f6a70, 0x666063bca, 0xff0f6a70, 0x666063bca, 0xff0f6a70 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0XA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0XA767661, 0xD06016F7, 0XA7696661, 0xD06016F7, 0XA7696661, 0xD06016F7, 0XA769661110 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0XA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0XBDBDF21C, 0XCAB5B5FFE9, 0XBDBDF21C, 0XCAC8 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b9b94, 0x5d681b02, 0x2a6f2b944, 0x5d681b02, 0x2a6f2b94, 0x5a05df1b, 0x2d02ef8d,};Hasil Menjalankan:
Contoh penambahan verifikasi CRC32 di atas dalam enkapsulasi paket protokol khusus adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.