资源简介

C++网络编程实例文件,里面包含各个章节的C++源码。 第一章 网络通信基础 第二章 认识Windows编程模型 第三章 网络基本应用在VC++中的实现 第四章 串口通信及其实例 第五章 应用层协议及编程实例 第六章 传输层协议及编程实例 第七章 网络层协议和数据链路层 第八章 Internet通信原理以及编程实例 第九章 基于Windows API的虚拟终端实现 第十章 多线程网络文件传输的设计与实现 第十一章 防火墙的设计与实现 第十二章 邮件转发器 第十三章 telnet bbs

资源截图

代码片段和文件信息

 // ICMP.cpp: implementation of the CICMP class.
//
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “RouteTrace.h“
#include “ICMP.h“
#include “ws2tcpip.h“

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CICMP::CICMP()
{
winsock = 0;
m_pIp = NULL;
m_pIcmp = NULL;

m_pIp = (IP_HEAD *)new BYTE[MAX_PACKET];
m_pIcmp = (ICMP_HEAD *)new BYTE[MAX_PACKET];

}

CICMP::~CICMP()
{
delete [] m_pIp;
delete [] m_pIcmp;
}


BOOL CICMP::Initialize()
{
WSADATA wsadata;
if( WSAStartup(MAKEWORD(2 1)&wsadata) )   
{
AfxMessageBox(“WSAStartup初始化失败!“);
return FALSE;
}

winsock= WSASocket (AF_INET   //建立socket

   SOCK_RAW
   IPPROTO_ICMP
   NULL 00);
if(!winsock) {
AfxMessageBox( “Socket创建失败!“);
return FALSE;
}

int timeout =5000;
setsockopt(winsockSOL_SOCKETSO_RCVTIMEO(char *)&timeout   // 设置接收超时
sizeof(timeout));
timeout = 5000;
setsockopt(winsockSOL_SOCKETSO_SNDTIMEO(char *)&timeout    //设置发送超时
sizeof(timeout));

return TRUE;
}

void CICMP::Uninitialize()                //释放Socket
{
if(winsock)
closesocket(winsock);
WSACleanup();
}

USHORT CICMP::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);

}

BOOL CICMP::SendICMPPack(char *pAddr)
{
sockaddr_in sockAddr;
memset((void *)&sockAddr0sizeof(sockAddr));
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = 0;
sockAddr.sin_addr.S_un.S_addr=inet_addr(pAddr);

return SendICMPPack(&sockAddr);
}
//--------------------发送---------------------------
BOOL CICMP::SendICMPPack(sockaddr_in *pAddr)
{
//填充ICMP数据各项
int  state;
char *p_data;
m_pIcmp->type = ICMP_ECHO;
m_pIcmp->code = 0;
m_pIcmp->ID = (USHORT)GetCurrentProcessId();
m_pIcmp->number = 0;
m_pIcmp->time = GetTickCount();
m_pIcmp->cksum = 0;

//填充数据
p_data = ((char *)m_pIcmp + sizeof(ICMP_HEAD));
memset((char *)p_data‘0‘DEF_PACKET);

//检查和
m_pIcmp->cksum = CheckSum((USHORT *)m_pIcmp
DEF_PACKET+sizeof(ICMP_HEAD));

//发送数据
state = sendto(winsock(char *)m_pIcmp
DEF_PACKET+sizeof(ICMP_HEAD)
NULL(struct sockaddr *)pAddrsizeof(sockaddr));

if(state == SOCKET_ERROR) {
if(GetLastError()==WSAETIMEDOUT)
m_strInfo = “连接超时!(发送)“;
else
m_strInfo=“出现未知发送错误!“;
return FALSE;
}

if(state  m_strInfo = “发送数据错误!“;
return FALSE;
}

memcpy((void *)&m_sockAddr(void *)pAddr
sizeof(sockaddr_in));

return TRUE;
}

//

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-06-01 18:19  第七章 网络层协议和数据链路层\
     目录           0  2013-06-01 18:19  第七章 网络层协议和数据链路层\源代码\
     目录           0  2013-06-01 18:19  第七章 网络层协议和数据链路层\源代码\Debug\
     文件       18047  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\ICMP.obj
     文件      114755  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.exe
     文件      244564  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.ilk
     文件       14741  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.obj
     文件     5630352  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.pch
     文件      304128  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.pdb
     文件        2888  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTrace.res
     文件       39180  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\RouteTraceDlg.obj
     文件      110801  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\StdAfx.obj
     文件      214016  2008-07-27 19:24  第七章 网络层协议和数据链路层\源代码\Debug\vc60.idb
     文件      372736  2008-05-07 15:12  第七章 网络层协议和数据链路层\源代码\Debug\vc60.pdb
     文件        4969  2002-05-09 14:25  第七章 网络层协议和数据链路层\源代码\ICMP.cpp
     文件        1837  2002-05-08 16:32  第七章 网络层协议和数据链路层\源代码\ICMP.h
     目录           0  2013-06-01 18:19  第七章 网络层协议和数据链路层\源代码\RES\
     文件         963  2002-05-04 13:02  第七章 网络层协议和数据链路层\源代码\RESOURCE.H
     文件        1078  2002-05-04 11:34  第七章 网络层协议和数据链路层\源代码\RES\RouteTrace.ico
     文件         402  2002-05-04 11:34  第七章 网络层协议和数据链路层\源代码\RES\RouteTrace.rc2
     文件        1392  2002-05-13 18:07  第七章 网络层协议和数据链路层\源代码\RouteTrace.clw
     文件        2119  2002-05-04 11:37  第七章 网络层协议和数据链路层\源代码\RouteTrace.cpp
     文件        4387  2002-05-08 16:47  第七章 网络层协议和数据链路层\源代码\RouteTrace.dsp
     文件         543  2002-05-04 11:34  第七章 网络层协议和数据链路层\源代码\RouteTrace.dsw
     文件        1251  2002-05-04 11:34  第七章 网络层协议和数据链路层\源代码\RouteTrace.h
     文件       74752  2008-07-27 19:25  第七章 网络层协议和数据链路层\源代码\RouteTrace.ncb
     文件       48640  2008-07-27 19:25  第七章 网络层协议和数据链路层\源代码\RouteTrace.opt
     文件         254  2008-07-27 19:24  第七章 网络层协议和数据链路层\源代码\RouteTrace.plg
     文件        6015  2002-05-13 08:38  第七章 网络层协议和数据链路层\源代码\RouteTrace.rc
     文件        6564  2002-05-13 08:43  第七章 网络层协议和数据链路层\源代码\RouteTraceDlg.cpp
     文件        1424  2002-05-08 17:10  第七章 网络层协议和数据链路层\源代码\RouteTraceDlg.h
............此处省略2个文件信息

评论

共有 条评论