我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

« 1 2» Pages: ( 1/2 total )
本页主题: 有没有VC++达人啊 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ golden /'gəuldən/ a. 金色的,发亮的,金的,金制的,高尔夫球 ]


有没有VC++达人啊

对于VC++对话框窗口  按钮...消息输入输出之类的代码如何写啊...不知道怎么将程序代码和图形窗口关联起来......我的生产实习啊..
一个ping的程序 实现自由调整包大小和发送次数...顺便实现traceroute
代码我一大堆...就是不知道往那扔啊..[屏蔽]图书馆也不开gate
顶端 Posted: 2007-08-23 17:17 | [楼 主]
zgb91



性别: 帅哥 状态: 该用户目前不在线
头衔: 曱甴
等级: 人见人爱
家族: 东北一家人
发贴: 4789
威望: 0
浮云: 1117
在线等级:
注册时间: 2006-03-06
最后登陆: 2012-05-18

5come5帮你背单词 [ toy /toi/ n. 玩具 ]


我也想好好学呢  但是太难了啊
顶端 Posted: 2007-08-23 17:29 | [1 楼]
est





性别: 帅哥 状态: 该用户目前不在线
等级: 荣誉会员
发贴: 6578
威望: 3
浮云: 431
在线等级:
注册时间: 2006-10-14
最后登陆: 2018-07-05

5come5帮你背单词 [ aloud /ə'laud/ ad. 大声地,响亮地 ]


同情楼主一个。我不会VC
顶端 Posted: 2007-08-23 17:44 | [2 楼]
seekts



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: 丢丢
发贴: 9456
威望: 0
浮云: 1106
在线等级:
注册时间: 2006-11-12
最后登陆: 2009-07-08

5come5帮你背单词 [ capture /'kæptə/ n. 俘虏;a. 被俘虏的 ]


去书店看看吧
顶端 Posted: 2007-08-23 18:39 | [3 楼]
tj.g



年度之星奖 特殊贡献奖 社区建设奖
性别: 帅哥 状态: 该用户目前不在线
头衔: 明媚的忧伤。。
等级: 幕后精英
家族: 水族馆
发贴: 19483
威望: 13
浮云: 318
在线等级:
注册时间: 2005-10-01
最后登陆: 2022-10-12

5come5帮你背单词 [ e.g. // n. 例如 ]


软件站有深入浅出MFC,这本书入gate不错

VC++ 还是比较简单的
顶端 Posted: 2007-08-23 18:48 | [4 楼]
kangtalc



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ ]


是用win32还是MFC?
顶端 Posted: 2007-08-23 19:13 | [5 楼]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ motivate /'məutiveit/ vt. 激励,鼓励,作为…的动机,促动 ]


可以直接用VC生成接口吗
如WM_PAINT,直接双击这个消息就可以了
顶端 Posted: 2007-08-23 19:19 | [6 楼]
雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ terrain /'terein/ n. 地形,地势 ]


用MFC....比如我按下PING这个按钮...应该调用的是PING的这个程序.....但是其他比如IP..包大小等信息需要从窗口输入获得.....Get.....Text().
就是不知道ping相关的比如定义头结构....判断..解析等代码扔到哪去
顶端 Posted: 2007-08-23 21:02 | [7 楼]
est





性别: 帅哥 状态: 该用户目前不在线
等级: 荣誉会员
发贴: 6578
威望: 3
浮云: 431
在线等级:
注册时间: 2006-10-14
最后登陆: 2018-07-05

5come5帮你背单词 [ lion /'laiən/ n. 狮子 ]


Quote:
引用第4楼tj.g于2007-08-23 18:48发表的  :
软件站有深入浅出MFC,这本书入gate不错

VC++ 还是比较简单的

强人啊,
顶端 Posted: 2007-08-23 21:49 | [8 楼]
zhoubaozhou





性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 696
威望: 0
浮云: 1082
在线等级:
注册时间: 2007-03-13
最后登陆: 2023-01-26

5come5帮你背单词 [ integrate /'intigreit/ v. (使)结合,(使)一体化;a. 完整的,综合的 ]


Quote:
引用第7楼雪狼王于2007-08-23 21:02发表的  :
用MFC....比如我按下PING这个按钮...应该调用的是PING的这个程序.....但是其他比如IP..包大小等信息需要从窗口输入获得.....Get.....Text().
就是不知道ping相关的比如定义头结构....判断..解析等代码扔到哪去


可以创建一个新的线程,代码就往里面COPY,然后用用户界面的控制线程的运行停止
顶端 Posted: 2007-08-23 21:55 | [9 楼]
雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ tiger /'taigə/ n. 虎 ]


Quote:
引用第9楼zhoubaozhou于2007-08-23 21:55发表的  :


可以创建一个新的线程,代码就往里面COPY,然后用用户界面的控制线程的运行停止

为什么听不懂呢.....
顶端 Posted: 2007-08-23 23:50 | [10 楼]
autium



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 655
威望: 0
浮云: 1115
在线等级:
注册时间: 2006-10-16
最后登陆: 2009-02-24

5come5帮你背单词 [ finger /'fiŋgə/ n. 手指 ]


LZ写好了,共享一个哟
顶端 Posted: 2007-08-23 23:51 | [11 楼]
雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ activate /'æktiveit/ vt. 使活动,使激活,使活化 ]


就是这个东西...IP地址.包大小..
//这个是ping按钮的代码
void CPingDlg::Onping()
{
    // TODO: Add your control notification handler code here
    CButton*checkbox = (CButton*)GetDlgItem(IDC_CHECK_ROUTE);
    int state = checkbox ->GetCheck();        //判断是否设置了路由选项
    char host[100];
    GetDlgItemText(IDC_HOST,host,100);  //获得主机名或者IP地址

    //设置ping参数
    m_ping.SetConfigure(host,state);
    //开始ping
    m_ping.Ping();
    m_messageout+="ping 完成!\r\n---------------\r\n";
    //显示ping结果
    SetDlgItemText(IDC_EDIT2,m_messageout);
    //清除ping数据
    m_ping.Cleanup();
}


这个是定义
//ICMP define
#define IP_RECORD_ROUTE 0x7
#define DEF_PACKET_SIZE 32
#define MAX_PACKET      1024
#define MAX_IP_HDR_SIZE 60
#define ICMP_ECHO        1
#define MAX_ICMP_ECHO  255
#define ICMP_ECHOREPLY  0
#define ICMP_MIN        8

//IP HEADER STRUCT
typedef struct _ipher
{
    unsigned int    h_len:4;        //    head length
    unsigned int    version:4;        //IP version
    unsigned char    tos;            //server type
    unsigned short    total_len;        //the total length
    unsigned short    ident;            //identify
    unsigned short    frag_andfrags;    //flag
    unsigned char    ttl;            //time to live
    unsigned char    proto;            //protocol type
    unsigned short    checksum;        //IP check
    unsigned int    shourceIP;        //source ip address
    unsigned int    destIP;            // dest ip address
}IPHeader;
     
//ICMP header struct
typedef struct _icmphdr
{
    BYTE    i_type;
    BYTE    i_code;
    USHORT  i_cksum;
    USHORT    i_id;
    USHORT  i_seq;
    ULONG    timestamp;
}IcmpHeader;

//IP options struct
typedef struct _ipoptionhdr
{
    unsigned char    code;
    unsigned char    len;
    unsigned char    ptr;
    unsigned long    addr[9];
}IpOptionHeader;

class CPing1App
{
public:
    //set ping
    void SetConfigure(char * host,BOOL,recordrout=FALSE,int size=DEF_PACKET_SIZE);
    void DecodeIpOptions(char *buf,int bytes);
    void Cleanup();
    //ping
    void Ping(int timeout =1000);
    SOCKET m_hSocket;
    IpOptionHeader  m_ipopt;
    SOCKADDR_IN m_addrDest;    //dest ip
    SOCKADDR_IN m_addrFrom;
    char    *recvbuf;
    char    *icmp_data;
    USHORT    seq_no;
    char *ipdest;
    int     datasize;
    BOOL m_bRecordRout;
    CMyPingDlg    *m_dlg;
    virtual ~CPing();
private:
    void DecodeICMPHeader(char *buf,int bytes,SOCKADDR_IN* from);
    USHORT checksum(USHORT *buffer,int size);
    void FillICMPData(char *icmp_data,int datasize);

};
远程图片:20070823235133203.jpg
顶端 Posted: 2007-08-23 23:56 | [12 楼]
雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ press /pres/ vt. 压,按,紧握,抱紧,挤榨,熨平(衣服等);n. 新闻界,报界,压榨机,压,按 ]


这个是PING函数
void CPing::Ping(int timeout)
{
    m_hSocket = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP,NULL,0,
        WSA_FLAG_OVERLAPPED);
    if (m_hSocket == INVALID_SOCKET)
    {
        AfxMessageBox("socket创建失败");
        return;
    }
    if (m_bRecordRout)
    {
        ZeroMemory(&m_ipopt,sizeof(m_ipopt));
        m_ipopt.code = IP_RECORD_ROUTE;
        m_ipopt.ptr = 4;
        m_ipopt.len = 39;
        int ret = setsockopt(m_hSocket,IPPROTO_IP,IP_OPTIONS,
            (char *)&m_ipopt,sizeof(m_ipopt));
        if (ret == SOCKET_ERROR)
        {
            AfxMessageBox("设置SOCKET协议选项错误");   
        }
}
    //设置发送/接受超时选项
    int bread = setsockopt(m_hSocket, SOL_SOCKET,SO_RCVTIMEO,
        (char*)&timeout,sizeof(timeout));
    if (bread == SOCKET_ERROR)
    {
        AfxMessageBox("设置socket接受超时选项失败");
        return;
    }
    timeout = 1000;
    bread = setsockopt(m_hSocket, SOL_SOCKET,SO_RCVTIMEO,
        (char*)&timeout,sizeof(timeout));
    if (bread == SOCKET_ERROR)
    {
        AfxMessageBox("设置socket发送超时选项失败");   
    }
    memset(&m_addrDest,0,sizeof(m_addrDest));
    //解析输入的主机名
    m_addrDest.sin_family = AF_INET;
    if ((m_addrDest.sin_addr.s_addr = inet_addr(ipdest))==INADDR_NONE)
    {
        struct hostent 8hp =NULL;
        if ((hp = gethostbyname(ipdest)) !=NULL)
        {
            memcpy(&(m_addrDest.sin_addr),hp->h_addr,hp->h_length);
            m_addrDest.sin.family = hp->h_addrtype;
        }
        else
        {
            AfxMessageBox("输入的主机不存在");
            return;
        }
    }
    //创建ICMP包
    datasize +=sizeof(IcmpHeader);
    icmp_data = (char*) HeaAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
        MAX_PACKET);
    recvbuf = (char*) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
        MAX_PACKET);
    if (!icmp_data)
    {
        AfxMessageBox("堆分配错误");
        return;
    }
    memset(icmp_data,datasize);
    FillIMCPData(icmp_data,datasize);
    int nCount = 0;
    while (1)
    {
        int bwrote;
        if (nCount++ ==4)
        {
            break;
        }
        ((IcmpHeader*)icmp_data) ->i_cksum = 0;
        ((IcmpHeader*)icmp_data) ->timestamp = GetTickCount();
        ((IcmpHeader*)icmp_data) ->i_seq = seq_no++;
        ((IcmpHeader*)icmp_data) ->i_cksum = checksum((USHORT*)icmp_data,datasize);
        bwrote = sendto(m_hSocket,icmp_data,datasize,0,
            (struct sockaddr*)&m_addrDest,sizeof(m_addrDest));
        if (bwrote ==SOCKET_ERROR)
        {
            if (WSAGetLastError() == WSAETIMEDOUT)
            {
                m_dlg->m_messageout +="Timed out! \r\n";
                m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
                continue;
            }
        AfxMessageBox("发送数据调用函数错误!");
        return;
        }
        if (bwrote <datasize)
        {
            CString temp;
            temp.Format("Wrote %d bytes \r\n",bwrote);
            m_dlg->m_messageout+=temp;
            m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);   
        }
        int fromlen = sizeof(m_addrFrom);
        bread = recvfrom(m_hSocket,recvbuf,MAX_PACKET,0,
            (struct sockaddr*)&m_addrFrom,&fromlen);
        if (bread ==SOCKET_ERROR)
        {
            if (WSAGetLastError() == WSAETIMEDOUT)
            {
                m_dlg->m_messageout+="Timed out! \r\n";
                m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
                continue;
            }
            AfxMessageBox("接收数据函数调用错误");
            return;
        }
        //解析ICMP头,显示Ping结果
        DecodeICMPHeader(recvbuf,bread,&m_addrFrom);
    }
}

//清除Socket,ICMP以及缓冲区
void CMyPing::Cleanup()
{
    if (m_hSocket !=INVALID_SOCKET)
    {
        closesocket(m_hSocket);
        HeapFree(GetProcessHeap(),0,recvbuf);
        HeapFree(GetProcessHeap(),0,icmp_data);
        return;
    }
}

//填充ICMP数据包
void CMyPing::FillICMPData(char *icmp_data,int datasize)
{
    IcmpHeader *icmp_hdr = NULL;
    char      *datapart = NULL;
    //设置ICMP头部架构
    icmp_hdr = (IcmpHeader*)icmp_data;
    icmp_hdr->i_type = ICMP_ECHO;
    icmp_hdr->i_code = 0;
    icmp_hdr->i_id = (USHORT)GetCurrentProcessId();
    icmp_hdr->i_cksum = 0;
    icmp_hdr->i_seq = 0;
    datapart = icmp_data + sizeof(IcmpHeader);
}

//解析IP头部可选参数
void CMyPing::DecodeIPOptions(char *buf,int bytes)
{
    IpOptionHeader *ipopt = NULL;
    IN_ADDR inaddr;
    int i;
    HOSTENT *host = NULL;
    ipopt = (IpOptionHeader *)(buf + 20);
    m_dlg->m_messageout+="Ping结果: \r\n";
    m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
    for (i=0;i<(ipopt->ptr/4)-1;i++)
    {
        inaddr.S_un.S_addr = ipopt->addr;
        if(i !=0)
        {
            m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_-messageout);
        }
        host = gethostbyaddr((char *)&inaddr.S_un.S_addr,
            sizeof(inaddr.S_un.S_addr),AF_INET);
        CString temp;
        if(host)
        {
            temp.Format("(% -15s) % s \r\n",inet_ntoa(inaddr),
                host->h_name);
            m_dlg->m_messageout+=tmep;
            m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
        }
        else
        {
            temp.Format("(%-15s)\r\n",inet_ntoa(inaddr));
            m_dlg->m_messageout+=tmep;
            m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
        }
    }
    return;
}

//对ICMP数据包进行校验
USHORT CMyPing::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);
}

//设置ping参数
void CMyPing::SetConfigure(char * host,BOOL recordout,int size)
{
    if (ipdest)
    {
        delete[] ipdest;
        ipdest = NULL;   
    }
    // 设置路由可选项
    m_bRecordRout = recordout;
    datasize = size;
    // 设置目的地址
    ipdest = new char [strlen(host)+1];
    strcpy(ipdest,host);
}

//解析ICMP包头部信息
void CMyPing::DecodeICMPHeader(char *buf,int bytes,SOCKADDR_IN *from)
{
    IPHeader *iphdr = NULL;
    IcmpHeader *icmphdr = NULL;
    unsigned short iphdrlen;
    DWORD tick;
    static int icmpcount = 0;
    iphdr = (IPHeader *)buf;
    iphdrlen = iphdr->h_len * 4;
    //得到以MS为单位的当前时间
    tick = GetTickCount();
    //第一次解析ICMP头信息需要解析IP头选项
    if ((iphdrlen == MAX_IP_HDR_SIZE) && (!icmpcount))
    {
        DecodeIPOptions(buf,bytes);
    }
    CString temp;
    if (bytes < iphdrlen + ICMP_MIN)
    {
        temp.Format("Too few bytes from %s\r\n",inet_ntoa(from->sin_addr));
        m_dlg->m_messageout+=tmep;
        m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
    }
    icmphdr = (IcmpHeader*)(buf +iphdrlen);
    if (icmphdr->i_type !=ICMP_ECHOREPLY)
    {
        temp.Format("noneecho type %d recvd\r\n",icmphdr->i_type);
        m_dlg->m_messageout+=tmep;
        m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
        return;
    }
    //确保当前的ICMP回应是所发送的ICMP包的回应.
    if (icmphdr->i_id != (USHORT)GetCurrentProcessId())
    {
        temp.Format("someone else's packet! \r\n");
        m_dlg->m_messageout+=tmep;
        m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
        return;
    }
    //设置PING结果显示信息
    temp.Format("%d bytes from %s: \r\n",bytes,inet_ntoa(from->sin_addr));
    m_dlg->m_messageout+=temp;
    temp.Format("icmp_seq = %d. \r\n",icmphdr->i_seq);
    m_dlg->m_messageout==temp;
    temp.Format("time: %d ms \r\n",tick - icmphdr->timestamp);
    m_dlg->m_messageout+=tmep;
    m_dlg->SetDlgItemText(IDC_EDIT1,m_dlg->m_messageout);
    icmpcount++;
    return;
}
顶端 Posted: 2007-08-23 23:57 | [13 楼]
雪狼王



贝尔诺勋章
性别: 帅哥 状态: 该用户目前不在线
头衔: 打不死的小强
等级: 荣誉会员
家族: 5COME5婚姻介绍所
发贴: 7568
威望: 4
浮云: 446
在线等级:
注册时间: 2005-10-19
最后登陆: 2009-04-30

5come5帮你背单词 [ debate /di'beit/ n. & v. 辩论,讨论 ]


完了..要3联了....不得不3联了

我要问的就是像IP地址..包大小等信息如何导入和在哪导入.....谢谢了....
PS:因为代码中我是在不同工程中弄的.所以有的消息函数定义不一致...
顶端 Posted: 2007-08-24 00:02 | [14 楼]
« 1 2» Pages: ( 1/2 total )
我来我网·5come5 Forum » 程序员之家

Total 0.010469(s) query 5, Time now is:11-23 12:19, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号