Winsock 入门 计算校验和 示例

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 #define DATA_MAX_LEN    14   /* 最大数据长度 */
 5
 6 struct data_sum
 7 {
 8     char data[DATA_MAX_LEN]; /* 数据 */
 9     unsigned short checksum; /* 校验和 */
10 };
11
12 unsigned short ip_checksum(unsigned short *buf, int buf_len)
13 {
14     unsigned long checksum = 0;
15
16     while (buf_len > 1)
17     {
18         checksum += *buf++;
19         buf_len -= sizeof(unsigned short);
20     }
21
22     if (buf_len)
23     {
24         checksum += *(unsigned char *)buf;
25     }
26
27     checksum = (checksum >> 16) + (checksum & 0xffff);
28     checksum += (checksum >> 16);
29
30     return (unsigned short)(~checksum);
31 }
32
33 int main(int argc, char **argv)
34 {
35     struct data_sum msg = { "adddddaa", 0 };
36     int length = sizeof(msg);
37
38     printf("length = %d\n",length);
39
40     /* checksum = 0, 计算校验和 */
41     msg.checksum = ip_checksum((unsigned short *)&msg, length);
42     printf("Calculate check sum : 0x%x\n", msg.checksum);
43
44     /* 包含 checksum 值, 验证校验和 */
45     msg.checksum = ip_checksum((unsigned short *)&msg, length);
46     printf("Verify check sum : 0x%x\n", msg.checksum);
47
48     msg.data[0]=‘w‘;
49         /* 包含 checksum 值, 验证校验和 因为改变了其值,校验和不为0 */
50     msg.checksum = ip_checksum((unsigned short *)&msg, length);
51     printf("Verify check sum : 0x%x\n", msg.checksum);
52
53     return 0;
54 }
时间: 2024-10-11 18:12:18

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

计算字段示例

计算字段示例 ArcGIS 10 使用键盘输入值并不是编辑表中值的唯一方式.在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算.您可以对所有记录或选中记录执行简单计算和高级计算.此外,还可以在属性表中的字段上计算面积.长度.周长和其他几何属性.以下各部分包括使用字段计算器的若干示例.计算可以通过 Python 或 VBScript 执行. Python 是 ArcGIS 建议使用的脚本语言.如果要访问地理处理功能(包括要素几何),请使用Python.采用 Python 作为

【转载】Lucene.Net入门教程及示例

本人看到这篇非常不错的Lucene.Net入门基础教程,就转载分享一下给大家来学习,希望大家在工作实践中可以用到. 一.简单的例子 //索引Private void Index(){    IndexWriter writer = new IndexWriter(@"E:\Index", new StandardAnalyzer());    Document doc = new Document();    doc.Add(new Field("Text",&qu

具有自动地计算校验和和格式化条形码的能力的条形码控件MSI Plessey

MSI Plessey条形码控件是在20世纪70年代由英国Plessey Company所设计的,主要使用在图书馆和零售应用中.MSI Code字符集的符号集是由数字0-9表示的条形码符号,开始符和结束符组成.在MSI字体中,使用圆括号来表示开始和结束字符.若不用IDAutomation字体工具将MSI字体作为一个条形码打印的话可能会比较困难,因为要求校验和数字计算.如果要首选一种简单易用的条形码字体并且不要求MSI Code,那么请考虑IDAutomation的Codabar Font,它不需

python 计算校验和

校验和是经常使用的,这里简单的列了一个针对按字节计算累加和的代码片段.其实,这种累加和的计算,将字节翻译为无符号整数和带符号整数,结果是一样的. 使用python计算校验和时记住做截断就可以了. 这里仅仅是作为一个代码样本,权作标记,直接上代码 ''' Created on 2014年9月4日 @author: lenovo ''' import random ''' 实际计算校验和时,解释为无符号整数还是带符号整数,结果必然是一样的.因为基于补码方式存储,计算加法时都是按位加,然后该进位的就进

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

libnids关于计算校验和引起的抓不到包的现象的解决方法: nids.h中有这么一段: struct nids_chksum_ctl { u_int netaddr; u_int mask; u_int action; u_int reserved; }; extern void nids_register_chksum_ctl(struct nids_chksum_ctl *, int); 这段是相关与计算校验和的,比较新的网卡驱动会自动计算校验和,我们要做的就是把它关掉,方法是: 在mai

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

目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) [番外篇]ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 完善数据注解 到目前为止的表格页面效果: 我们需

Winsock 入门 Echo 示例

1 #include <stdio.h> 2 #include <winsock2.h> 3 4 #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */ 5 6 #define ECHO_DEF_PORT 7 /* 侦听的缺省端口 */ 7 #define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */ 8 9 int main(int argc, char **argv) 10 { 11 WSADA

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

1 #include <stdio.h> 2 3 union endian_u 4 { 5 /*最大成员的长度就是联合成员的长度.联合可以在定义时直接进行初始化,但这个初始化必须是联合第一个成员的类型,所以把unsigned short sval放在第一个成员的原因*/ 6 unsigned short sval; 7 unsigned char cval[2]; 8 }; 9 10 int main(int argc, char *argv[]) 11 { 12 char *info = &

Gnu.Emacs.Lisp编程入门一书示例代码

最近两天看了Gnu.Emacs.Lisp编程入门一书,把书中的代码示例都写了出来,以及书中的练习题,供有需要的同志使用. 注意:分号后面内容是对应函数及表达式的结果. :-) ;; Chapter 1: 列表处理 ; 在Lisp中,数据和程序都以同样的方式表示:也就是说,它们都是由空格分割. ; 由括号括起来的单词.数字或者其他列表的列表. ; 在一个列表中,列表的元素被称为"原子",不可再被分割为更小的部分.列表 ; 中的原子是由空格一一分割的. ; 双引号中的文本,不论是句子还是段