dataandconst.cpp

来自「TCP和UDP数据包发送程序 本程序需要安装Winpcap」· C++ 代码 · 共 61 行

CPP
61
字号
#include "StdAfx.h"
#include ".\dataandconst.h"

USHORT CheckSum(const char *buf, int size) 
{ 
	USHORT *buffer=(USHORT *)buf;
	unsigned long cksum=0; 
	while(size >1) 
	{ 
		cksum+=*buffer++; 
		size -=sizeof(USHORT); 
	} 
	if(size ) 
	{ 
		cksum += *(UCHAR*)buffer; 
	} 

	cksum = (cksum >> 16) + (cksum & 0xffff); 
	cksum += (cksum >>16); 
	return (USHORT)(~cksum); 
} 
USHORT CheckSum(USHORT *buffer, int size) 
{ 
	unsigned long cksum=0; 
	while(size >1) 
	{ 
		cksum+=*buffer++; 
		size -=sizeof(USHORT); 
	} 
	if(size ) 
	{ 
		cksum += *(UCHAR*)buffer; 
	} 

	cksum = (cksum >> 16) + (cksum & 0xffff); 
	cksum += (cksum >>16); 
	return (USHORT)(~cksum); 
} 


unsigned short TcpCheckSum(const char *pTcpData, const char *pPshData, UINT nTcpCount)
{
	unsigned short sCheckSum = ~CheckSum(pTcpData,nTcpCount);
	unsigned long checkSum = sCheckSum;
	checkSum <<= 16;
	sCheckSum = ~CheckSum(pPshData,12);
	checkSum += sCheckSum;	

	return CheckSum((char*)&checkSum,4);
}
unsigned short UdpCheckSum(const char *pTcpData, const char *pPshData, UINT nTcpCount)
{
	unsigned short sCheckSum = ~CheckSum(pTcpData,nTcpCount);
	unsigned long checkSum = sCheckSum;
	checkSum <<= 16;
	sCheckSum = ~CheckSum(pPshData,12);
	checkSum += sCheckSum;	

	return CheckSum((char*)&checkSum,4);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?