#include <stdio.h>
#include <string.h> #define DATA_MAX_LEN 14 /* 最大数据长度 */ struct data_sum
{
char data[DATA_MAX_LEN]; /* 数据 */
unsigned short checksum; /* 校验和 */
}; unsigned short ip_checksum(unsigned short *buf, int buf_len)
{
unsigned long checksum = ; while (buf_len > )
{
checksum += *buf++;
buf_len -= sizeof(unsigned short);
} if (buf_len)
{
checksum += *(unsigned char *)buf;
} checksum = (checksum >> ) + (checksum & 0xffff);
checksum += (checksum >> ); return (unsigned short)(~checksum);
} int main(int argc, char **argv)
{
struct data_sum msg = { "adddddaa", };
int length = sizeof(msg); printf("length = %d\n",length); /* checksum = 0, 计算校验和 */
msg.checksum = ip_checksum((unsigned short *)&msg, length);
printf("Calculate check sum : 0x%x\n", msg.checksum); /* 包含 checksum 值, 验证校验和 */
msg.checksum = ip_checksum((unsigned short *)&msg, length);
printf("Verify check sum : 0x%x\n", msg.checksum); msg.data[]='w';
/* 包含 checksum 值, 验证校验和 因为改变了其值,校验和不为0 */
msg.checksum = ip_checksum((unsigned short *)&msg, length);
printf("Verify check sum : 0x%x\n", msg.checksum); return ;
}

Winsock 入门 计算校验和 示例的更多相关文章

  1. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  2. libnids关于计算校验和引起的抓不到包的现象的解决方法

    libnids关于计算校验和引起的抓不到包的现象的解决方法: nids.h中有这么一段: struct nids_chksum_ctl { u_int netaddr; u_int mask; u_i ...

  3. python 计算校验和

    校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段.其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的. 使用python计算校验和时记住做截断就可以了. 这里 ...

  4. arcgispro 计算字段示例

    计算字段示例 round(!Shape.area!,1) 使用键盘输入值并不是编辑表中值的唯一方式.在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算.您可以对所有记录或选中记录 ...

  5. Terraform入门教程,示例展示管理Docker和Kubernetes资源

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  6. Winsock 入门 Echo 示例

    #include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32") /* Win ...

  7. Winsock 入门 判读主机字节序 示例

    #include <stdio.h> union endian_u { /*最大成员的长度就是联合成员的长度.联合可以在定义时直接进行初始化,但这个初始化必须是联合第一个成员的类型,所以把 ...

  8. 大数据入门第七天——MapReduce详解(一)入门与简单示例

    一.概述 1.map-reduce是什么 Hadoop MapReduce is a software framework for easily writing applications which ...

  9. SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

随机推荐

  1. oracle-day1

    今天的学习内容是oracle产品的三种安装方式,还有使用dbca静默建库 oracle产品的三种安装方式分别为: 1.图形化(Java向导)安装引导 2.使用应答文件静默安装 3.直接将装好的orac ...

  2. REST服务中的异常处理

    在REST服务中,服务端如果产生了异常信息,无论是业务异常或是系统异常,如果直接将异常抛出,在客户端浏览器中,是无法获取异常的详细,只能获取一个StateCode 500 Internal Serve ...

  3. java基础2.0:Object、Class、克隆、异常编程

    Java编程中两个重要的类Object 和 Class及java异常编程 (1)是所有Java类(API提供的类.自定义类)的最终父类. (2)作用:在JVM管理对象中的过程中,有一套统一的类型检查和 ...

  4. C# 后台json转换成时间格式

    1传入json 字符进行转换        public DateTime ConvertTime(string milliTime)        {            long timeTri ...

  5. MVC3中使用RadioButtonFor()

    创建页面  进行初始化   默认 男 被选中 <div class="label"> <div class="editor-label"> ...

  6. java多线程synchronized底层实现

    一直想把这个特别重要的关键词的底层实现搞明白.(当然现在也没有完全明白,如果有错误以后修改这篇文章) 首先,这个关键词synchronize可以说是个语法糖,它的具体用法网上很多博客都讲的比较明了了. ...

  7. Android Studio :Android Studio 与 Gradle 深入【二】

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=255063&extra=page%3D2%26filter%3Dautho ...

  8. 【poj2774】 Long Long Message

    http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...

  9. TortoiseGit与GitHub项目关联设置

    一.常规克隆GitHub上的项目: 1.在本地硬盘上放置项目的地方上[右键]->[Git 克隆]->在[url地址]上输入https的GitHub的链接,然后就是等待完成,之后即可完成拉取 ...

  10. HDU 2795 Billboard

    Description 在学校的入口处有一个巨大的矩形广告牌,高为h,宽为w.所有种类的广告都可以贴,比如ACM的广告啊,还有餐厅新出了哪些好吃的,等等..   在9月1号这天,广告牌是空的,之后广告 ...