ping程序课程设计实验报告


    






    Windows网络程序设计
    课程设计



    课 程 名 称 ping程序设计
    姓   名
    系 专 业 计算机科学系网络工程班
    导师姓名职 称
    完 成 时 间 2013年X月X日





    目 录

    概述······························································1
    11 设计目·························································1
    12 功描述·························································1
    二 技术理概述·····················································1
    21 RAW模式SOCKET编程·········································1
    22 基设计·························································2
    三 程序具体操作···················································2
    31 Ping模块 ······················································2
    32 功控制模块·····················································5
    33 数报解析模块··················································6
    四 程序具体实现·····················································8
    41初始化模块设计实现···············································8
    42功控制模块实现···············································9
    43数块解读模块实现············································13
    44 ping设置模块实现··············································14
    五 实验总结源代码··············································15
    51实验总结························································16
    52部分关键源码····················································16







    概述
    11设计目
    PING程序较测试网络连通性程序PING程序基ICMPICMP回送请求回送应答工作计算机网络课程知道ICMP基IP协议ICMP包通IP封装传递
    12功描述
    设计 C语言实现 ping命令测试机机间联通情况程序提供选项实现功
    (1)实现ping功程序实现基ping操作发送ICMP回显请求报文接收显应答报文
    (2)记录路程序提供r选项记录源机目机路
    (3)输出指定条数记录程序提供n选项输出指定条数记录
    (4)指定输出条记录程序提供datasize选项指定输出数报
    (5)输出户帮助程序提供户帮助显示程序提供选项选项格
    二技术理概述
    21 RAW模式SOCKET编程
    PING程序面户应程序该程序ICMP封装机制通IP协议工作实现直接IPICMP包进行操作实验中RAW模式SOCKET编程
    ICMPTCPIP协议集中子协议属网络层协议机路器间传递控制信息包括报告错误交换受限控制状态信息等遇IP数法访问目标IP路器法前传输速率转发数包等情况时会动发送ICMP消息通Ping命令发送ICMP回应请求消息记录收ICMP回应回复消息通消息网络机障提供参考
    该协议进行相应ICMP设置Windows XP中首先开网络连接右键单击启Internet连接防火墙网络连接选择属性开属性窗口接着选择高级选项卡单击右角设置钮然高级设置窗口中选择ICMP选项卡中进行相应设置包括允许传入回显请求等
    熟悉SOCKET编程包括基系统调SOCKETBINDLISTEN等
    22基设计
    221定义数结构
    需定义IP数报ICMP包等相关数结构程序定义3结构体:iphdricmphdripotionhdr分存放IP报头信息ICM P报头信息IP路选项信息
    222程序实现
    WINDOWS环境实现PING程序
    223程序求
    命令提示符输入:
    PING ΧΧΧΧΧΧΧΧΧΧΧΧ
    中ΧΧΧ目机IP址求支持域名否带开关变量做求带开关变量时求返回4次响应
    返回信息格式:
    REPLY FROM ΧΧΧΧΧΧΧΧΧΧΧΧ

    REQUEST TimeOut (法PING通情况)
    三程序具体操作
    31 Ping模块
    Ping()函数程序核心部分基调模块函数实现终功布骤包括:定义初始化全局变量开socket动态库设置接收发送超时值域名址解析分配存创建初始化ICMP报文发送ICMP请求报文接收ICMP 应答报文解读应答报文输出Ping结果释放占资源流程页图31示
    注释:
    (1) 该模块非处理包括判断输出判断结果含义
    (2) 程序没运行次输出四行结果(前提输入址效)欲次PING址必须重新启动程序
    (3) 输入时输入目标机名然ping结果TIMEOUT

    开始
    定义初始化全局变量
    判断WSAStartup函数否调成功
    输出调失败

    创建套接字设置socket接收超时发送超时选项

    输入PINGIP址
    解析输入容设置PING参数
    创建填充ICMP数报文
    判断否已发送四次
    Break
    发送接收解析数包
    输出PIING结果

    结束
    清残余


    图31 模块流程图
    32功控制模块
    功控制模块模块提供调函数该模块包括参数获取功计算ICMP数报文检验清SOCKETICMP包数接受缓区占资源释放功显示尸帮助功该模块包含三函数实现流程图22示
    Checksum开始
    定义初始化cksum
    (size > 1)
    确定cksumsize

    if (size)
    计算校验cksum获结果
    cksum + *(UCHAR*)buffer

    结束
    Cleanup开始
    if (m_hSocket INVALID_SOCKET)
    关闭套接字
    释放占资源
    清ICMP包数接受缓区
    F
    WSACleanup()
    结束

    图32 功控制模块
    注释:
    (1) illICMPData系列初始化语句流程图中画出
    (2) Cleanup() 函数中WSACleanup()HeapFree()closesocket()库函数
    (3) checksum()校验函数冗余校验种形式 通错误检测方法空间(通信)者时间(计算机存储)传送数完整性进行检查种简单方法
    33数报解析模块
    数报解析模块提供解读IP选项解读IcMP报文功机收目机返回1cMP回显应答报文开始逐解读IcMP报文果需记录路情况IcMP解析函数调IP选项解读函数实现IP路输出(程序没功该模块DecodeICMPHeader函数实现中间会调模块相应函数流程图图23
    注释:
    (1) 判断否数报回应前判断回应少容语句未呈现出
    (2) 函数GetTickCount()记录时机处现时间(毫秒级)
    DecodeICMPHeader开始
    定义相关变量初始化
    tick GetTickCount()
    回应报文

    输出
    tick0[icmpcount]tick icmphdr>timestamp
    判断时间否1ms
    printf(Reply from s dytesd time<1ms icmp_seq d\ninet_ntoa(from>sin_addr) bytes icmphdr>i_seq )
    printf(Reply from s dytesd timed icmp_seq d\ninet_ntoa(from>sin_addr) bytestick0[icmpcount] icmphdr>i_seq)


    icmpcount++
    结束
    结束


    图33 数报解析模块

    四程序具体实现
    41 初始化模块设计实现
    init_ping_packet(send_buf packet_size seq_no)
    if (send_ping(sd dest send_buf packet_size) > 0)
    {
    while (1)
    {
    int feed_back
    feed_back recv_ping(sd source recv_buf MAX_PING_PACKET_SIZE)
    if (feed_back (1))
    {
    Pull the sequence number out of the ICMP header If
    it's bad we just complain but otherwise we take
    off because the read failed for some reason
    unsigned short header_len recv_buf>h_len * 4
    ICMPHeader* icmphdr (ICMPHeader*)
    ((char*)recv_buf + header_len)
    if (icmphdr>seq seq_no) {
    continue
    }
    else {
    SendMessage(WM_MYMESSAGE)
    break
    }
    }
    if (feed_back0) {
    Success or fatal error (as opposed to a minor error)
    so take off
    if((decode_reply(recv_buf packet_size &source) 2))
    {SendMessage(WM_MYMESSAGE)
    break}
    }
    if(feed_back2) {SendMessage(WM_MYMESSAGE)break}
    }
    }
    }
    42 功控制模块实现
    421部分界面功实现函数:
    int CMypingDlgsetup_for_ping(unsigned long IP int ttl SOCKET &sd sockaddr_in &dest)
    {
    Create the socket
    sd socket(AF_INET SOCK_RAW IPPROTO_ICMP)
    unsigned long arg 1
    ioctlsocket(sdFIONBIO&arg)
    if (sd INVALID_SOCKET) {
    m_listctlInsertString(linenum++ Failed to create raw socket )
    return 1
    }
    if (setsockopt(sd IPPROTO_IP IP_TTL (const char*)&ttl
    sizeof(ttl)) SOCKET_ERROR) {
    m_listctlInsertString(linenum++ TTL setsockopt failed )
    return 1
    }
    Initialize the destination host info block
    memset(&dest 0 sizeof(dest))
    Turn first passed parameter into an IP address to ping
    unsigned int addr IP
    if (addr INADDR_NONE) {
    It was a dotted quad number so save result
    destsin_addrs_addr addr
    destsin_family AF_INET
    }
    return 0
    }
    int CMypingDlgdecode_reply(IPHeader *reply int bytes sockaddr_in *from)
    {
    Skip ahead to the ICMP header within the IP packet
    unsigned short header_len reply>h_len * 4
    ICMPHeader* icmphdr (ICMPHeader*)((char*)reply + header_len)
    Make sure the reply is sane
    if (bytes < header_len + ICMP_MIN) {
    FILE *fp
    char str1send[100]
    fpfopen(cceshitxtw+)
    fprintf(fptoo few bytes from sinet_ntoa(from>sin_addr))
    rewind(fp)
    fgets(str1send100fp)
    m_listctlInsertString(linenum++str1send)
    fclose(fp)
    return 1
    }
    else if (icmphdr>type ICMP_ECHO_REPLY) {
    if (icmphdr>type ICMP_TTL_EXPIRE) {
    if (icmphdr>type ICMP_DEST_UNREACH) {
    m_listctlInsertString(linenum++Destination unreachable)
    }
    return 1
    }
    If TTL expired fall through Next test will fail if we
    try it so we need a way past it
    }
    else if (icmphdr>id (USHORT)GetCurrentProcessId()) {
    Must be a reply for another pinger running locally so just
    ignore it
    return 2
    }
    Figure out how far the packet travelled
    int nHops int(reply>ttl)
    Okay we ran the gamut so the packet must be legal dump it
    if (icmphdr>type ICMP_TTL_EXPIRE) {
    stroutFormat(Reply from s idd bytesd TTL expiredinet_ntoa(from>sin_addr)icmphdr>idbytes)
    m_listctlInsertString(linenum++ strout)fflush(stdout)
    }
    else {
    stroutFormat(Reply from s idd bytesd TTLd timedmsinet_ntoa(from>sin_addr)icmphdr>idbytesnHops(GetTickCount() icmphdr>timestamp))
    m_listctlInsertString(linenum++ strout)fflush(stdout)
    }
    return 0
    }
    unsigned short CMypingDlgip_checksum(unsigned short *buffer int size)
    {
    unsigned long cksum 0

    Sum all the words together adding the final byte if size is odd
    while (size > 1) {
    cksum + *buffer++
    size sizeof(unsigned short)
    }
    if (size) {
    cksum + *(unsigned char*)buffer
    }
    Do a little shuffling
    cksum (cksum >> 16) + (cksum & 0xffff)
    cksum + (cksum >> 16)
    Return the bitwise complement of the resulting mishmash
    return (unsigned short)(~cksum)
    }
    void CMypingDlgOnTestMessage(WPARAM wParamLPARAM lParam)
    {
    TODO Add your message handler code here andor call default
    if(times0)m_button1EnableWindow(TRUE)
    ICMPHeader* send_buf 0
    IPHeader* recv_buf 0
    unsigned long int IP
    取入设置参数
    UpdateData(TRUE)
    报文
    int packet_size m_size
    packet_size max(sizeof(ICMPHeader)
    min(MAX_PING_DATA_SIZE (unsigned int)packet_size))
    423校验函数
    unsigned short CMypingDlgip_checksum(unsigned short *buffer int size)
    {
    unsigned long cksum 0
    Sum all the words together adding the final byte if size is odd
    while (size > 1) {
    cksum + *buffer++
    size sizeof(unsigned short)
    }
    if (size) {
    cksum + *(unsigned char*)buffer
    }
    Do a little shuffling
    cksum (cksum >> 16) + (cksum & 0xffff)
    cksum + (cksum >> 16)
    Return the bitwise complement of the resulting mishmash
    return (unsigned short)(~cksum)
    }
    43 数块解读模块实现
    431数包头函数
    unsigned short header_len recv_buf>h_len * 4
    ICMPHeader* icmphdr (ICMPHeader*)
    ((char*)recv_buf + header_len)
    if (icmphdr>seq seq_no) {
    continue
    }
    else {
    SendMessage(WM_MYMESSAGE)
    break
    }
    }
    432初始化套接字函数
    WSAData wsaData
    if (WSAStartup(MAKEWORD(2 1) &wsaData) 0) {
    m_listctlInsertString(linenum++ Failed to find Winsock 21 or better )
    UpdateData(FALSE)
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    433解读IP头函数
    int CMypingDlgallocate_buffers(ICMPHeader *&send_buf IPHeader *&recv_buf int packet_size)
    {
    First the send buffer
    send_buf (ICMPHeader*)new char[packet_size]
    if (send_buf 0) {
    m_listctlInsertString(linenum++ Failed to allocate output buffer )
    return 1
    }
    And then the receive buffer
    recv_buf (IPHeader*)new char[MAX_PING_PACKET_SIZE]
    if (recv_buf 0) {
    m_listctlInsertString(linenum++ Failed to allocate output buffer )
    return 1
    }

    return 0
    }
    44 ping设置模块实现
    int CMypingDlgsetup_for_ping(unsigned long IP int ttl SOCKET &sd sockaddr_in &dest)
    {
    Create the socket
    sd socket(AF_INET SOCK_RAW IPPROTO_ICMP)
    unsigned long arg 1
    ioctlsocket(sdFIONBIO&arg)
    if (sd INVALID_SOCKET) {
    m_listctlInsertString(linenum++ Failed to create raw socket )
    return 1
    }
    if (setsockopt(sd IPPROTO_IP IP_TTL (const char*)&ttl
    sizeof(ttl)) SOCKET_ERROR) {
    m_listctlInsertString(linenum++ TTL setsockopt failed )
    return 1
    }
    Initialize the destination host info block
    memset(&dest 0 sizeof(dest))
    Turn first passed parameter into an IP address to ping
    unsigned int addr IP
    if (addr INADDR_NONE) {
    It was a dotted quad number so save result
    destsin_addrs_addr addr
    destsin_family AF_INET
    }
    return 0
    }
    五 实验总结源代码
    51实验总结
    次课程设计较实现求做功时遇少困难挑战通次设计加深Socket原始套接字编程理解实现Ping程序熟悉IPICMP等掌握TCPIP网络协议基实现方法熟悉Window网络编程技术熟悉套接字进行网络通信熟悉数通信网络技术时学会学合作交流完成项目讨方法解决问题力学会果通讨交流找资料独立解决遇问题懂更锻炼独立解决问题力
    编写程中基常见函数会应组发现知识匮乏学程中努力阅读复杂程序解基函数算法精良编程思想更动手写定难度程序应该害怕写程序出错应该胆写出想法出现错误解决错误找出知识漏洞模糊点通阅读错误程序试着帮查找错误样证书技头脑中规发现初学者番错误少走弯路
    52部分关键源码
    void CMypingDlgOnButton1()
    {
    TODO Add your control notification handler code here
    m_button1EnableWindow(FALSE)
    seq_no int(GetCurrentProcessId())
    ICMPHeader* send_buf 0
    IPHeader* recv_buf 0
    unsigned long int IP
    ttlDEFAULT_TTL
    取入设置参数
    UpdateData(TRUE)
    报文
    int packet_size m_size
    packet_size max(sizeof(ICMPHeader)
    min(MAX_PING_DATA_SIZE (unsigned int)packet_size))
    ping次数
    if(m_times <0)
    {
    m_times1
    times1
    }
    else
    timesm_times

    UpdateData(FALSE)
    目IP
    if(m_radioctlGetCheck()BST_CHECKED)
    {
    if (m_ipGetAddress(IP)<4) 取IP
    {
    MessageBox(_T(请重新输入IP址)_T(错误IP址)MB_OK |
    MB_ICONEXCLAMATION)
    m_button1EnableWindow(TRUE)
    goto end2
    }
    IPhtonl(IP)
    }
    else
    {
    sockaddr_in sa
    WSAData wsaData
    WSAStartup(MAKEWORD(2 1) &wsaData)
    char str[150]
    int j
    CString host
    this>GetDlgItemText(IDC_EDIT1host)
    for( j 0 j < hostGetLength() j++)
    str[j] hostGetAt(j)
    str[j]'\0'
    hostent *hp
    if((hpgethostbyname(str))NULL)
    {
    m_listctlInsertString(linenum++ Something wrong with the host name )
    m_button1EnableWindow(TRUE)
    goto end1
    }
    memcpy ((char *)&sasin_addr(char *)hp>h_addrhp>h_length)
    IP sasin_addrs_addr
    WSACleanup()
    }
    Start Winsock up
    WSAData wsaData
    if (WSAStartup(MAKEWORD(2 1) &wsaData) 0) {
    m_listctlInsertString(linenum++ Failed to find Winsock 21 or better )
    UpdateData(FALSE)
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    Set up for pinging
    SOCKET sd
    sockaddr_in dest source
    if (setup_for_ping(IP ttl sd dest) < 0) {
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    if (allocate_buffers(send_buf recv_buf packet_size) < 0) {
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    Send the ping and receive the reply
    if(times)
    {
    延时
    int i GetTickCount()
    for( (GetTickCount() i)<1000 )
    init_ping_packet(send_buf packet_size seq_no)
    if (send_ping(sd dest send_buf packet_size) > 0)
    {
    while (1)
    {
    int feed_back
    feed_back recv_ping(sd source recv_buf MAX_PING_PACKET_SIZE)
    Receive replies until we either get a successful read
    or a fatal error occurs
    if (feed_back (1))
    {
    Pull the sequence number out of the ICMP header If
    it's bad we just complain but otherwise we take
    off because the read failed for some reason
    unsigned short header_len recv_buf>h_len * 4
    ICMPHeader* icmphdr (ICMPHeader*)
    ((char*)recv_buf + header_len)
    if (icmphdr>seq seq_no) {
    continue
    }
    else {
    SendMessage(WM_MYMESSAGE)
    break
    }
    }
    if (feed_back0) {
    Success or fatal error (as opposed to a minor error)
    so take off
    if((decode_reply(recv_buf packet_size &source) 2))
    {SendMessage(WM_MYMESSAGE) break}
    }
    if(feed_back2) {SendMessage(WM_MYMESSAGE)break}
    }
    }
    }
    void CMypingDlginit_ping_packet(ICMPHeader *icmp_hdr int packet_size int seq_no)
    {
    Set up the packet's fields
    icmp_hdr>type ICMP_ECHO_REQUEST
    icmp_hdr>code 0
    icmp_hdr>checksum 0
    icmp_hdr>id (USHORT)GetCurrentProcessId()
    icmp_hdr>seq seq_no
    icmp_hdr>timestamp GetTickCount()
    You're dead meat now packet
    const unsigned long int deadmeat 0xDEADBEEF
    char* datapart (char*)icmp_hdr + sizeof(ICMPHeader)
    int bytes_left packet_size sizeof(ICMPHeader)
    while (bytes_left > 0) {
    memcpy(datapart &deadmeat min(int(sizeof(deadmeat))
    bytes_left))
    bytes_left sizeof(deadmeat)
    datapart + sizeof(deadmeat)
    }
    Calculate a checksum on the result
    icmp_hdr>checksum ip_checksum((USHORT*)icmp_hdr packet_size)
    }
    int CMypingDlgsend_ping(SOCKET sd const sockaddr_in &dest ICMPHeader *send_buf int packet_size)
    {
    Send the ping packet in send_buf asis
    if (times(m_times1))
    {
    stroutFormat(Sending d bytes to s packet_sizeinet_ntoa(destsin_addr))
    m_listctlInsertString(linenum++ )
    m_listctlInsertString(linenum++ strout)fflush(stdout)
    m_listctlInsertString(linenum++ )
    }
    int bwrote sendto(sd (char*)send_buf packet_size 0 (sockaddr*)&dest sizeof(dest))
    if (bwrote SOCKET_ERROR) {
    stroutFormat(Send failed error Cd WSAGetLastError())
    m_listctlInsertString(linenum++ strout)
    return 1
    }
    else if (bwrote < packet_size) {
    stroutFormat(Send d bytes bwrote)
    m_listctlInsertString(linenum++ strout)
    }
    return 0
    }
    int CMypingDlgrecv_ping(SOCKET sd sockaddr_in &source IPHeader *recv_buf int packet_size)
    {
    调select进行处理
    timeval timeout
    timeouttv_sec1
    timeouttv_usec0
    fd_set readfds
    FD_ZERO(&readfds)
    FD_SET(sd&readfds)
    select(0&readfds00&timeout)
    if(FD_ISSET(sd&readfds)){
    m_listctlInsertString(linenum++ Request time out)
    return 2}
    Wait for the ping reply
    int fromlen sizeof(source)
    int bread recvfrom(sd (char*)recv_buf packet_size + sizeof(IPHeader) 0
    (sockaddr*)&source &fromlen)
    if (bread SOCKET_ERROR) {
    m_listctlInsertString(linenum++ read failed)
    if (WSAGetLastError() WSAEMSGSIZE) {
    m_listctlInsertString(linenum++ buffer too small)
    }
    else {
    m_listctlInsertString(linenum++ error #)
    }
    return 1
    }
    return 0
    }
    int CMypingDlgsetup_for_ping(unsigned long IP int ttl SOCKET &sd sockaddr_in &dest)
    {
    Create the socket
    sd socket(AF_INET SOCK_RAW IPPROTO_ICMP)
    unsigned long arg 1
    ioctlsocket(sdFIONBIO&arg)
    if (sd INVALID_SOCKET) {
    m_listctlInsertString(linenum++ Failed to create raw socket )
    return 1
    }
    if (setsockopt(sd IPPROTO_IP IP_TTL (const char*)&ttl
    sizeof(ttl)) SOCKET_ERROR) {
    m_listctlInsertString(linenum++ TTL setsockopt failed )
    return 1
    }
    Initialize the destination host info block
    memset(&dest 0 sizeof(dest))
    Turn first passed parameter into an IP address to ping
    unsigned int addr IP
    if (addr INADDR_NONE) {
    It was a dotted quad number so save result
    destsin_addrs_addr addr
    destsin_family AF_INET
    }
    return 0
    }
    int CMypingDlgdecode_reply(IPHeader *reply int bytes sockaddr_in *from)
    {
    Skip ahead to the ICMP header within the IP packet
    unsigned short header_len reply>h_len * 4
    ICMPHeader* icmphdr (ICMPHeader*)((char*)reply + header_len)
    Make sure the reply is sane
    if (bytes < header_len + ICMP_MIN) {
    FILE *fp
    char str1send[100]
    fpfopen(cceshitxtw+)
    fprintf(fptoo few bytes from sinet_ntoa(from>sin_addr))
    rewind(fp)
    fgets(str1send100fp)
    m_listctlInsertString(linenum++str1send)
    fclose(fp)
    return 1
    }
    else if (icmphdr>type ICMP_ECHO_REPLY) {
    if (icmphdr>type ICMP_TTL_EXPIRE) {
    if (icmphdr>type ICMP_DEST_UNREACH) {
    m_listctlInsertString(linenum++Destination unreachable)
    }
    return 1
    }
    If TTL expired fall through Next test will fail if we
    try it so we need a way past it
    }
    else if (icmphdr>id (USHORT)GetCurrentProcessId()) {
    Must be a reply for another pinger running locally so just
    ignore it
    return 2
    }
    Figure out how far the packet travelled
    int nHops int(reply>ttl)
    Okay we ran the gamut so the packet must be legal dump it
    if (icmphdr>type ICMP_TTL_EXPIRE) {
    stroutFormat(Reply from s idd bytesd TTL expiredinet_ntoa(from>sin_addr)icmphdr>idbytes)
    m_listctlInsertString(linenum++ strout)fflush(stdout)
    }
    else {
    stroutFormat(Reply from s idd bytesd TTLd timedmsinet_ntoa(from>sin_addr)icmphdr>idbytesnHops(GetTickCount() icmphdr>timestamp))
    m_listctlInsertString(linenum++ strout)fflush(stdout)
    }
    return 0
    }
    unsigned short CMypingDlgip_checksum(unsigned short *buffer int size)
    {
    unsigned long cksum 0
    Sum all the words together adding the final byte if size is odd
    while (size > 1) {
    cksum + *buffer++
    size sizeof(unsigned short)
    }
    if (size) {
    cksum + *(unsigned char*)buffer
    }
    Do a little shuffling
    cksum (cksum >> 16) + (cksum & 0xffff)
    cksum + (cksum >> 16)
    Return the bitwise complement of the resulting mishmash
    return (unsigned short)(~cksum)
    }
    WSAData wsaData
    if (WSAStartup(MAKEWORD(2 1) &wsaData) 0) {
    m_listctlInsertString(linenum++ Failed to find Winsock 21 or better )
    UpdateData(FALSE)
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    Set up for pinging
    SOCKET sd
    sockaddr_in dest source
    if (setup_for_ping(IP ttl sd dest) < 0) {
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    if (allocate_buffers(send_buf recv_buf packet_size) < 0) {
    m_button1EnableWindow(TRUE)
    goto cleanup
    }
    湘nan学院
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 8 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    Ping程序的设计与实现课程设计

     计算机网络课程设计报告设计名称 Ping程序的设计与实现 专业班级 同组人姓名 ...

    3年前   
    622    0

    计算机网络基础课程设计Ping程序的实现

    计算机网络工程课程设计报告题 目: Ping程序的实现 学生姓名: 学 号: 专业班级: 计科...

    3年前   
    485    0

    驱动程序实验报告操作系统课程设计报告

    操作系统课程设计报告班级: 计科 姓名: 学号: 老师: 时间:2012年X月X日一、设计目的操作...

    1年前   
    298    0

    大学物理实验课程设计实验报告

    大学物理实验课程设计实验报告  北方民族大学    大学物理实验(设计性实验)    实验报告   指导老师:王建明    姓    名:张国生    学    号:XX0233    学  ...

    9年前   
    722    0

    java课程设计实验报告样例

    分数_______嘉应学院计算机学院实验报告课程名称:面向对象程序设计课程设计(Java) 实验名称:”动物换位”程序设计 指导教师:肖振球 实验地点:_居家学习_实验时间:2020.03...

    4年前   
    865    0

    Visual FoxPro 课程设计实验报告

     中国最大的商务办公文档下载基地: http://www.word98.com/ ╔---------------------------------------------...

    10年前   
    11775    0

    实验报告-电力电子课程设计

    掌握晶闸管仿真模型模块各参数的含义。理解晶闸管的特性。

    4年前   
    1339    0

    车辆管理系统实验报告课程设计

     成绩: 《C++程序设计实践》报告专 业: 软件工程 班 级: 学 号: 姓 ...

    10个月前   
    272    0

    《高级语言程序设计》实验报告

    1.掌握在Visual C++6.0环境下C程序的建立、编辑、编译和执行过程。2.掌握C程序的最基本框架结构,完成简单程序的编制与运行。3.了解基本输入输出函数scanf()、printf ()...

    2年前   
    438    0

    C语言程序设计实验报告

    C语言程序设计实验报告  实验名称 计算出1000以内10个最大素数之和   实验目的   1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语...

    10年前   
    952    0

    《高级语言程序设计》实验报告

    设计一种用单链表存储多项式的结构(每个结点存储一项的系数和指数,类型都为int)并编写一个产生多项式链表的函数和一个实现两个多项式相加和相乘的函数。

    5年前   
    3508    0

    虚拟仪器课程设计实验报告

    《微机化仪器综合设计与实践》实验指导书大学机电工程学院目录实验六 基于PID算法的可控硅水温自动调节系统设计一、实验目的和要求1.掌握虚拟仪器高级语言Lab VIEW 或Lab Windows...

    4年前   
    846    0

    图书馆程序设计程序设计综合课程设计报告

    XX学院计算机科学与技术系信息管理与信息系统专业《程序设计综合课程设计》报告 (2010/2011学年 第一学期)学生姓名: 学生班级: 信息管理与信...

    2年前   
    555    0

    面向对象程序设计(C++)实验报告

    面向对象程序设计(C++)实验报告姓名:学院:数学与计算机学院 班级:10级计算机大类班 学号:实验5 单继承一、实验目的1.掌握派生的类别与方式; ...

    3年前   
    1094    0

    编译原理实验报告(一)词法分析程序

     编译原理实验报告(一) ----词法分析程序【目的要求】 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的...

    3年前   
    766    0

    铜陵学院C语言程序设计实验报告

    《C语言程序设计》 实验报告第二学期班 级 学 号姓 名指导教师实验一 Visual C++ 6.0编程环境与C语言程序的调试过程一、实验学时2 学时。二、...

    1年前   
    249    0

    C语言实验报告《逻辑结构程序设计》

    C语言实验报告《逻辑结构程序设计》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:_____...

    12年前   
    740    0

    小学算术运算测试程序JAVA课程设计报告

    面向对象程序设计(JAVA)课程设计说明书学院名称: 计算机与信息工程学院 班级名称: 20XX级计算机科学与技术 题 目: ...

    3年前   
    698    0

    小学数学测试系统C课程设计报告及源程序代码

    课 程 设 计 报 告课程名称 C语言课程设计 课题名称 小学数学测试系统 专 业 ...

    3年前   
    431    0

    简单的局域网聊天程序试验报告课程设计

    C++面向对象课程设计报告院(系): 计算机工程学院 专业: 软件工程 学生姓名: __  ...

    1年前   
    301    0

    文档贡献者

    文***品

    贡献于2022-05-26

    下载需要 8 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档