CRC校验,发送端产生校验码

/******************************************************************************
 *  Compilation:  javac CRC16CCITT.java
 *  Execution:    java CRC16CCITT s
 *  Dependencies:
 *
 *  Reads in a sequence of bytes and prints out its 16 bit
 *  Cylcic Redundancy Check (CRC-CCIIT 0xFFFF).
 *
 *  1 + x + x^5 + x^12 + x^16 is irreducible polynomial.
 *
 *  % java CRC16-CCITT 123456789
 *  CRC16-CCITT = 29b1
 *
 ******************************************************************************/

public class CRC16CCITT { 

    public static void main(String[] args) {
        int crc = 0xFFFF;          // initial value
        int polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) 

        // byte[] testBytes = "123456789".getBytes("ASCII");

        byte[] bytes = args[0].getBytes();

        for (byte b : bytes) {
            for (int i = 0; i < 8; i++) {
                boolean bit = ((b   >> (7-i) & 1) == 1);
                boolean c15 = ((crc >> 15    & 1) == 1);
                crc <<= 1;
                if (c15 ^ bit) crc ^= polynomial;
             }
        }

        crc &= 0xffff;
        System.out.println("CRC16-CCITT = " + Integer.toHexString(crc));
    }

}

多项式是0x1021

时间: 2024-11-06 10:40:00

CRC校验,发送端产生校验码的相关文章

Spring Boot2 系列教程 (十五) | 服务端参数校验之一

估计很多朋友都认为参数校验是客户端的职责,不关服务端的事.其实这是错误的,学过 Web 安全的都知道,客户端的验证只是第一道关卡.它的参数验证并不是安全的,一旦被有心人抓到可乘之机,他就可以有各种方法来摸拟系统的 Http 请求,访问数据库的关键数据.轻则导致服务器宕机,重则泄露数据.所以,这时就需要设置第二道关卡,服务端验证了. 老项目的服务端校验 @RestController @RequestMapping("/student") public class ValidateOne

以为文件传输完毕发送8个校验字节会单独收到(延迟无效)

昨晚的实验就已经告诉我答案:最后一次接受到的发送数据有以下几种可能:   1200 678 1200   1200 1200 678   1200 678 1200(以上数据简单描述一下问题)在发送端,我故意延迟(10s)发送最后的结束符(#File)给客户端,结果还是没能让recv单独接受者几个小不点字节.暗示我自己:不能凭借最后接受到小于1200字节为文件结束标志,TCP的隐藏了传输的真相.什么发送确认,丢失重传,它掩盖的非常好.     如果没有书籍的帮助,我想自己一定被掩埋的事实所困扰的

jrtplib中组播代码发送端和接收端的实现

</pre>文章里面主要是把发送端课接收端代码的实现提了出来,和重要函数里的源码贴出来辅助学习,看到网上有人说好久做不出来,建议看看对应加入组播的源码,注意细节,话不多说,代码直接贴出来,各位朋友有意见多多交流.<p></p><p>发送端:</p><pre code_snippet_id="1677192" snippet_file_name="blog_20160510_2_5720022" nam

UDP发送端&amp;UDP接收端

UDP发送端: import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class UdpSendDemo { public static void main

Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: 1 package com.himi.updDemo1; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.util.Scanner; 8 9 /** 10 * 11

用python做自动化测试--对服务器端的自动化测试(2)-发送端模拟器

python的http client库很多,有httplib, urllib 和urllib2,但这几个用起来还是比较麻烦,requests 是高富帅(http://docs.python-requests.org/en/latest/),接口更简洁,优雅. 支持Json, 很方便设置发送的header, session管理. #!/usr/bin/env python #coding=utf-8 import time,logging,sys,os import pickle import u

Udp发送端和接收端

//UdpReceive.java /* 定义udp的接收端. 思路: 1.定义udpSocket服务.通常会监听一个端口,其实就是这个接收网络应用程序定义一个数字标示. 2.定义一个数据包,用来存储接收到的字节数据. 因为数据包对象中有特有功能可以提取字节数据中不同数据信息. 3.通过Socket服务的receive方法将收到的数据存入已定义好的数据包中. 4.通过数据包对象的特有功能将这些不同的数据取出,打印到控制台上. 5.关闭资源. */ import java.net.*; publi

Jmail组件实现php邮件发送(支持转码)

<?php$jmail=new COM("JMail.Message")or die("无法调用Jmail组件");//屏蔽例外错误,静默处理$jmail->silent=true;//编码必须设置,否则中文会乱码$jmail->charset="utf-8";//发信人邮件地址和名称,能自定义,可以和邮件发送账号不同 $jmail->From="";$jmail->FromName="

Struts2中使用校验文件对表单的校验以及常用的校验

之前的手动校是在Action中编写validate犯法或validateXXX形式的方法来完成校验的,如果要给予验证框架来完成输入校验,只需在于Action同一目录下创建一个xml格式的验证文件即可.而之前Action中添加validate方法或validateXXX方法就不需要了. Action.java代码 package action; import com.opensymphony.xwork2.ActionSupport; public class check extends Acti