网络程序设计(一)必要文件
来源:互联网 发布:js防水涂膜厚度 编辑:程序博客网 时间:2024/05/29 04:29
comm.cpp
//////////////////////////////////////////////////// comm.cpp文件#include <winsock2.h>#include <windows.h>#include "Ws2tcpip.h"#include "comm.h"USHORT checksum(USHORT* buff, int size){unsigned long cksum = 0;while(size>1){cksum += *buff++;size -= sizeof(USHORT);}// 是奇数if(size){cksum += *(UCHAR*)buff;}// 将32位的chsum高16位和低16位相加,然后取反cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >> 16);return (USHORT)(~cksum);}BOOL SetTTL(SOCKET s, int nValue){int ret = ::setsockopt(s, IPPROTO_IP, IP_TTL, (char*)&nValue, sizeof(nValue));return ret != SOCKET_ERROR;}BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv){int ret = ::setsockopt(s, SOL_SOCKET, bRecv ? SO_RCVTIMEO : SO_SNDTIMEO, (char*)&nTime, sizeof(nTime));return ret != SOCKET_ERROR;}
comm.h
//////////////////////////////////////////////////// comm.h文件// 包含一些公共函数#ifndef __COMM_H__#define __COMM_H__// 校验和的计算// 以16位的字为单位将缓冲区的内容相加,如果缓冲区长度为奇数,// 则再加上一个字节。它们的和存入一个32位的双字中USHORT checksum(USHORT* buff, int size);BOOL SetTTL(SOCKET s, int nValue);BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv = TRUE);#endif // __COMM_H__
Debug.h
////////////////////////////////////////////// Debug.h文件// 调试支持#ifndef __DEBUG_H__#define __DEBUG_H__#ifdef _DEBUG#define ODS(szOut)\{\OutputDebugString(szOut);\}#define ODS1(szOut, var)\{\TCHAR sz[1024]; \_stprintf(sz, szOut, var);\OutputDebugString(sz);\}#else#define ODS(szOut)#define ODS1(szOut, var)#endif// _DEBUG#endif // __DEBUG_H__
initsock.h
//////////////////////////////////////////////////////////// initsock.h文件#include <winsock2.h>#pragma comment(lib, "WS2_32")// 链接到WS2_32.libclass CInitSock{public:CInitSock(BYTE minorVer = 2, BYTE majorVer = 2){// 初始化WS2_32.dllWSADATA wsaData;WORD sockVersion = MAKEWORD(minorVer, majorVer);if(::WSAStartup(sockVersion, &wsaData) != 0){exit(0);}}~CInitSock(){::WSACleanup();}};
protoinfo.h
//////////////////////////////////////////////////// protoinfo.h文件/*定义协议格式定义协议中使用的宏 */#ifndef __PROTOINFO_H__#define __PROTOINFO_H__#define ETHERTYPE_IP 0x0800#define ETHERTYPE_ARP 0x0806typedef struct _ETHeader // 14字节的以太头{UCHARdhost[6];// 目的MAC地址destination mac addressUCHARshost[6];// 源MAC地址source mac addressUSHORTtype;// 下层协议类型,如IP(ETHERTYPE_IP)、ARP(ETHERTYPE_ARP)等} ETHeader, *PETHeader;#define ARPHRD_ETHER 1// ARP协议opcodes#defineARPOP_REQUEST1// ARP 请求#defineARPOP_REPLY2// ARP 响应typedef struct _ARPHeader// 28字节的ARP头{USHORThrd;//硬件地址空间,以太网中为ARPHRD_ETHERUSHORTeth_type;// 以太网类型,ETHERTYPE_IP ??UCHARmaclen;//MAC地址的长度,为6UCHARiplen;//IP地址的长度,为4USHORTopcode;//操作代码,ARPOP_REQUEST为请求,ARPOP_REPLY为响应UCHARsmac[6];//源MAC地址UCHARsaddr[4];//源IP地址UCHARdmac[6];//目的MAC地址UCHARdaddr[4];//目的IP地址} ARPHeader, *PARPHeader;// 协议#define PROTO_ICMP 1#define PROTO_IGMP 2#define PROTO_TCP 6#define PROTO_UDP 17typedef struct _IPHeader// 20字节的IP头{ UCHAR iphVerLen; // 版本号和头长度(各占4位) UCHAR ipTOS; // 服务类型 USHORT ipLength; // 封包总长度,即整个IP报的长度 USHORT ipID; // 封包标识,惟一标识发送的每一个数据报 USHORT ipFlags; // 标志 UCHAR ipTTL; // 生存时间,就是TTL UCHAR ipProtocol; // 协议,可能是TCP、UDP、ICMP等 USHORT ipChecksum; // 校验和 ULONG ipSource; // 源IP地址 ULONG ipDestination; // 目标IP地址} IPHeader, *PIPHeader; // 定义TCP标志#define TCP_FIN 0x01#define TCP_SYN 0x02#define TCP_RST 0x04#define TCP_PSH 0x08#define TCP_ACK 0x10#define TCP_URG 0x20#define TCP_ACE 0x40#define TCP_CWR 0x80typedef struct _TCPHeader// 20字节的TCP头{USHORTsourcePort;// 16位源端口号USHORTdestinationPort;// 16位目的端口号ULONGsequenceNumber;// 32位序列号ULONGacknowledgeNumber;// 32位确认号UCHARdataoffset;// 高4位表示数据偏移UCHARflags;// 6位标志位//FIN - 0x01//SYN - 0x02//RST - 0x04 //PUSH- 0x08//ACK- 0x10//URG- 0x20//ACE- 0x40//CWR- 0x80USHORTwindows;// 16位窗口大小USHORTchecksum;// 16位校验和USHORTurgentPointer;// 16位紧急数据偏移量 } TCPHeader, *PTCPHeader;typedef struct _UDPHeader{USHORTsourcePort;// 源端口号USHORTdestinationPort;// 目的端口号USHORTlen;// 封包长度USHORTchecksum;// 校验和} UDPHeader, *PUDPHeader;#endif // __PROTOINFO_H__
- 网络程序设计(一)必要文件
- Swift学习(一:认识必要数据类型)
- 网络程序设计
- 网络程序设计
- 网络程序设计
- 网络程序设计--TCP通信(服务器端)
- 网络程序设计--TCP通信(客户端)
- 网络程序设计--UDP通信(服务器)
- 网络程序设计--UDP通信(客户端)
- 开篇必要的概率统计知识(一)
- SM9必要的一些数学基础知识(一)
- 一、还原项目之前的状态(不小心删除必要的文件代码)以及动态获取新浪微博授权码
- 网络程序设计(C++版) 知识点总结
- Java笔记(十二)——网络程序设计
- VC网络程序设计二则(转)
- IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备
- 关于set想说的(一)之Set的实现类及必要的方法
- 跨平台(unix/linux to windows)ftp传送tar文件时候,必要使用binary模式。
- Java编程中“为了性能”需做的26件事《转》
- mysql有时候忘记密码了怎么办?MySQL 5.5举例
- _MSC_VER 定义编译器的版本
- C#操作Word
- Flash图像裁剪上传组件
- 网络程序设计(一)必要文件
- 13-01-18-->3
- window7 32位和64位区别
- C++ 源码分析网址
- #pragma详解
- Windows 2003 IIS6+PHP5+MySQL5+Zend环境搭建图文教程 (最新新手教程)
- 做好当下,而不是后悔当初——观《蝴蝶效应》所感
- proc文件系统实验---入门经典
- SQL 左外连接,右外连接,全连接,内连接