デモが終了したばかりで、私はトピックに直接行きました。ソケットサーバーとクライアント間の通信をシミュレートするために2つのスレッドを開き、データを指定された形式のメッセージにカプセル化して送信します
コード:
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.unnethostexception; */public class customdata {public static void main(string args []){// server thread new runnable(){@override public void run(){//サーバーソケットServersocket server = new Serversocket(9000); //クライアントがソケットソケットソケット= server.cectiprims();最初の2つのバイト[2] crc32 = bytestoint(crc); getcrc32(bytes)){system.out.println( "crc32 right!"); integer.parseint(bytetohex [1]、16); //残りのデータを取得し、データを取り出します。2-4-1-1; inputstream.close(); //クライアントスレッドnew Runnable(){@Override public void run(){//サーバーソケット= new Socket(getIpAddress()、9000); outputStream outputStream = socket.getOutputStream(); string str = "hellow world! 0xff、data.length); } /***メッセージをカプセル化して送信メッセージ*メッセージ形式は{合計メッセージ長[2バイト]、CRC32チェックコード[4バイト]、Verバージョン情報[1バイト]、CMD命令[1バイト]、データデータコンテンツ[複数のバイト]}メッセージ、上記のように、バイトをフォーマットの短いTotalSize =(short)(2 + 4 + 1 + 1 + len)に追加します。 //出力メッセージの長さout.write(shorttobyte(totalsize)、0、2); // byte [] bytes = new byte [1 + 1 + len]をチェックする必要があるフィールド; int index = 0;バイト[index ++] = 0x05; //バージョン番号(これはここで死んでいる)バイト[index ++] = cmd; // cmd命令//(int i = 0; i <len; i ++){bytes [index ++] = data [i]; } // ver、cmd、およびdata(crc32アルゴリズムが最下部にある、オンラインで見つかった)のCRC32検証コードを取得します。 //出力crc code.write(crc32、0、crc32.length)をチェックします。 //出力ver、cmd、data out.write(bytes、0、bytes.length); } catch(ioexception e){e.printstacktrace(); }} / ** *ネイティブIPを取得 * / private static string getIpAddress()をスローunknownhostexception {inetAddressアドレス= inetAddress.getLocalHost(); return address.gethostAddress(); } / ** * int to byte [] * / public static byte [] inttobytes(int value){byte [] bytes = new byte [4];バイト[3] =(byte)(value >> 24);バイト[2] =(byte)(value >> 16);バイト[1] =(byte)(value >> 8);バイト[0] =(byte)(value >> 0);バイトを返します。 } / ** * short to byte [] * / public static byte [] shorttobyte(short value){byte [] bytes = new byte [2];バイト[1] =(byte)(value >> 8);バイト[0] =(byte)(value >> 0);バイトを返します。 } / *** byte to hexadecimal* / 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)|(bytes [0] < / ** byte [] to short* / public static byteshort(byte [] bytes){(short)((bytes [1] << 8)| bytes [0]&0xff)) / *** 0x77073096、0xee0e612c、0x990951ba、0x076dc419、0x706af48f、0xe963a535、0x9e6495a3、0x0edb8832、0x799797979797978a4、0xe0d5e97d2d297d2d297 0x09b64c2b、0x7eb17cbd、0xe7b82d07、0x90bf1d91、0x1db71064、0x6ab020f2、0xf3b97148、0x84be41de、0x1de451515151515145151 0x83d385c7、0x136c9856、0x646bba8c0、0xfd62f97a、0x8a65c9ec、0x14015c4f、0x630666cd9、0xfa0f3d63、0x8d080df5、0x3b6910c8e10c8、 0xd56041e4、0xa2677172、0x3c03e4d1、0x4b04d447、0xd20d85fd、0xa50ab56b、0x35b5a8fa、0x42b2986c、0xdbbc9d6、0xbcfcf940、0xcbcfcf940、 0x45df5c75、0xdcd60dcf、0xabd13d59、0x26d930ac、0x51de003a、0xc8d75180、0xbfd06116、0x21b4f4b5、0x56b3c423、0xcfba9599999999999999999999999 0x2802b89e、0x5f058808、0xc60cd9b2、0xb10be924、0x2f6f7c87、0x58684c11、0xc1611dab、0xb6662d3d、0x76dc4190、0x01db7106、0x01db7106、0x01db7106、0x01db7106、 0xefd5102a、0x71b18589、0x06b6b51f、0x9fbfe4a5、0xe8b8d433、0x7807c9a2、0x0f00f00f934、0x9609a88e、0xe106d3d3086d2dbbb、 0x91646c97、0xe6635c01、0x6b6b51f4、0x1c6c6162、0x856530d8、0xf262004e、0x6c0695ed、0x1b01a57b、0x820824c1、0xf50fcc457、0xfcc457、 0x12b7e950、0x8bbeb8ea、0xfcb9887c、0x62dd1df、0x15da2d49、0xfbd444c65、0x4db26158、0x3ab20hed 44c65 0x4Adfa541、0x3dd895d7、0xa4d1c46d、0xd3d6f4fb、0x4369e96a、0x346ed9fc、0xad678846、0xda60b8d0、0x44042d73、0x33031ca 0xdd0d7cc9、0x5005713c、0x270241aa、0xbe0b1010、0xc90c2086、0x5768b525、0x206f85b3、0xb966d409、0xce61e49f、0x5edef90e、0x29998 0xb0d09822、0xc7d7a8b4、0x59b33d17、0x2eb40d81、0xb7bd5c3b、0xc0ba6cad、0xedb88320、0x9abfb3b6、0x03b6e20c、0x74b1d29a、0xed299 0x9dd277af、0x04db2615、0x73dc1683、0xe3630b12、0x94643b84、0x0d6d6a3e、0x7a5aa8、0xe40ecf0b、0x9309ff9d、0x0a0000ae27、0x9309ff1、 0xf00f9344、0x8708a3d2、0x1e01f268、0x6906c2fe、0xf762575d、0x806567cb、0x196c3671、0x6e6b06e7、0xfed41b76、0x89d3a2be0 0x67dd4acc、0xf9b9df6f、0x8ebeeff9、0x17b7be43、0x60b08ed5、0xd6d6a3e8、0xa1d1937e、0x38d8c2c4、0x4fdff252、0xd1bb67f1、0xd1bb67f1、 0x3fb506dd、0x48b2364b、0xd80d2bda、0xaf0a1b4c、0x36034af6、0x41047a60、0xdf60efc3、0xa867df55、0x316e8eef、0x4669be79、0x4699、0xcb615 0xbc66831a、0x256fd2a0、0x5268e236、0xcc0c7795、0xbb0b4703、0x220216b9、0x5505262f、0xc5ba3bbe、0xb2828、0x2bb45a92、0xbb5a92、 0xc2d7ffa7、0xb5d0cf31、0x2cd99e8b、0x5bdeae1d、0x9b64c2b0、0xec63f226、0x756aa39c、0x026d930a、0x90906a9、0xeb0e3207263f、0xeb0e363f、 0x05005713、0x95bf4a82、0xe2b87a14、0x7bb12bae、0x0cb61b38、0x92d28e9b、0xe5be0d、0x7cdcefb7、0x0bdbdf21、0x86d3d22d4d4d4df21 0x68ddb3f8、0x1fda836e、0x81be16cd、0xf6b9265b、0x6fb077e1、0x18b74777、0x88085ae6、0xff0f6a70、0x6606063bca、0x1101010b5c、 0xf862ae69、0x616bffd3、0x166ccf45、0xa00ae278、0xd70dd2ee、0x4e048354、0x3903b3c2、0xa7672661、0xd060166f7、0x4969474d、0x4969474d、0x4969474d、0x4969474d 0xaed16a4a、0xd9d65adc、0x40df0b66、0x37d83bf0、0xa9bcae53、0xdebbb9ec5、0x47b2cf7f、0x30b5ffe9、0xbdbdf1c、0xcababac28a、0xababaded 0x24b4a3a6、0xbad03605、0xcdd70693、0x54de5729、0x23d967bf、0xb3667a2e、0xc4614ab8、0x5d681b02、0x2a6fb94、0xb40cbedbe37 0x5a05df1b、0x2d02ef8d、};実行結果:
Javaカスタムプロトコルパケットカプセル化にCRC32検証を追加する上記の例は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。