TCP数据包的发送和接收设计报告样本
- 格式:doc
- 大小:176.00 KB
- 文档页数:19
简单TCP通信程序设计实验报告学校:华中科技大学学院:姓名:学号:同组人:一,实验目的初步掌握C++ 语言TCP/IP 通信程序的设计。
二,实验环境1、Windows 7 操作系统。
2、编程工具:Visual Studio 2010。
三,实验框图WinSock 通过流式套接字(SOCK_STREAM)提供TCP 服务。
通常服务器进程先启动,等待客户端的连接请求。
其基基通信过程如下图1所示。
四,实验内容与步骤(server)1,加载WinSock动态链接库函数原型:intWSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);程序代码://加载WinSock.DllWSADATA wsaData;WORD wVersionRequested = MAKEWORD(2, 2);if (WSAStartup(wVersionRequested, &wsaData) != 0){// WinSock 初始化错误处理代码}2,创建套接字创建套接字的实质是请求操作系统分配通信所需要的资源(包括存储空间、网络资源、CPU 时间等),用一个称为套接字描述符(socket descriptor)的整数表示。
函数原型:SOCKET socket(intaf, int type, int protocol);程序代码://创建套接字SOCKET sock_client;if ((sock_client= socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){cout<<"创建套接字失败!错误代码:"<<WSAGetLastError() <<endl;WSACleanup();return 1;}3,建立连接客户端则在创建套接字后,调用connect 函数发起连接建立请求。
编号:_______________本资料为word版本,可以直接编辑和打印,感谢您的下载TCP协议实验甲方:___________________乙方:___________________日期:___________________网络课第四次上机实验报告—__TCP协议实验率实验内容实验内容主要包括:设计保存TCP连接相关信息的数据结构(TCB;TCP协议的接收处理和封装发送;TCP协议提供的Socket函数接口。
4实验过程设计保存TCP连接相关信息的数据结构(TC0 mt DINT32 ?工皿1如; UINT32 dstfiddr: 口INTL6 arcForu- ni!4T16 datPort;UIIU3Z UINT32 ack; UIMT1« windowSize; Uli-ITS state; ICB ^nextlGib;用数据结构TCB为每一个TCP连接维护socketfd , srcAddr , dstAddr, srcPort, dstPort, seq, ack, windowSize, state 这些状态信息。
以链表形式组织多个连接,nextTcb指向下一个连接的数据结构。
TCP 分组接收函数stud_tcp_input()首先,检查校验和;然后通过字节序转换获取相应的信息,检查序列号。
如果序列号不正确,则调用tcp_DiscardPkt ;最后将报文交由输入有限状态机处理,有限状态机对报文进行处理,转换状态。
根据当前的状态并调用stud_tcp_output 函数完成tcp建连、数据传递时返回ACK tcp断连等工作TCP 分组发送函数stud_tcp_output ()判断需要发送的报文类型,根据报的类型对包中的相应字段进行设置,判断是否可以发送(发送窗口不为0)。
构造TCP数据报文并发送。
填写TCP报文各字段的内容和数据,转换字节序,计算校验和,然后调用发送流程的下层接口函数sendIpPkt()发送。
实验报告课程名称计算机网络实验项目传输控制协议TCP 实验仪器主服务器一台,装有HTTP、FTP、TELNET、MAIL、DHCP、DNS等服务、组控设备若干、实验机:运行网络协议仿真教学系统通用版程序系别计算机学院专业网络工程班级/学号 0802/2008011396学生姓名邵华强实验日期_____2010.10.17_________成绩_______________________指导教师_______高卓_____________实验二 传输控制协议TCP【实验目的】1. 掌握TCP 协议的报文格式2. 掌握TCP 连接的建立和释放过程3. 掌握TCP 数据传输中编号与确认的过程4. 掌握TCP 协议校验和的计算方法5. 理解TCP 重传机制 【实验学时】建议4学时 【实验环境配置】该实验采用网络结构一【实验原理】 一. TCP 报文格式16位源端口号16位目的端口号32位序号32位确认序号16位窗口大小4位首部长度保留(6位)A C K P S H R S T S Y N F I NU R G 16位检查和16位紧急指针选项数据1161732二. TCP 连接的建立TCP是面向连接的协议。
在面向连接的环境中,开始传输数据之前,在两个终端之间必须先建立一个连接。
对于一个要建立的连接,通信双方必须用彼此的初始化序列号seq和来自对方成功传输确认的应答号ack(指明希望收到的下一个八位组的编号)来同步,习惯上将同步信号写为SYN,应答信号写为ACK。
整个同步的过程称为三次握手,下图说明了这个过程:三. TCP连接的释放对于一个已经建立的连接,TCP使用四次握手来结束通话(使用一个带有FIN附加标记的报文段)。
TCP关闭连接的步骤如下图所示:四. TCP重传机制TCP每发送一个报文段,就对这个报文段设置一次计时器。
只要计时器设置的重传时间到期,但还没有收到确认,就要重传这一报文段。
【实验步骤】练习一:察看TCP连接的建立和释放1.主机B、C、D启动协议分析器进行数据捕获,并设置过滤条件(提取TCP协议)。
目录一、软件概要简介 (6)二、概要设计 (6)1 62类图 (6)3.数据结构的定义 (6)4.程序截图 (7)三、详细设计 (8)1关键性代码 (8)1.1内存映射文件读 (9)1.2内存映射文件写 (9)1.3文件的发送 (9)1.4文件的接收 (9)1.4.1客户端接收套接字 (9)1.4.2 客户端把接收到的文件写人自己的文件..10四、调试分析及测试结果 (15)一、软件概要简介我们做的是基于tcp数据包发送和接收的文件传输,采用的是客户/服务器模式,首先客户端连接到服务器,然后服务器端就可以选择需要传输的文件,开始传输。
二、概要设计11.1内存映射文件我们首先是用内存映射文件的方法把文件一块一块的从磁盘映射到内存,每映射一块,就传输一块,直到把整个文件都传输完毕为止。
内存映射文件内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。
由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。
实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。
内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理。
所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识,内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就不再赘述,感兴趣的读者可以参阅其他相关书籍。
TCP报文数据格式设计一、引言TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
它在因特网协议族中占据重要地位,为应用程序提供了一种可靠的、有序的和错误校验的数据传输方式。
为了实现这些目标,TCP定义了一种特定的报文数据格式,用于封装和传输数据。
二、TCP报文数据格式TCP报文由首部和数据两部分组成。
首部固定20个字节,而数据部分长度可变。
以下是TCP报文数据格式的详细设计:1.源端口和目的端口:各占16位,用于标识发送和接收数据的应用程序。
2.序列号:占32位,表示该报文段中的第一个字节的数据序列号。
3.确认号:占32位,用于确认收到对端的某个报文段,并表示期望接收下一个字节的序列号。
4.头部长度:占4位,用于标识TCP头部长度,单位为4字节。
5.保留位:占6位,目前保留,用于未来使用。
6.标志位:共6位,具体含义如下:•URG:紧急指针有效•ACK:确认号有效•PSH:推送功能有效•RST:重置连接•SYN:同步连接,用于建立连接•FIN:结束连接1.窗口大小:占16位,表示接收窗口大小。
2.校验和:占16位,用于检测报文在传输过程中的错误。
3.紧急指针:占16位,与URG标志位配合使用,用于紧急数据的传输。
4.选项字段:长度可变,常用选项包括:最大段大小、窗口扩大因子、时间戳等。
三、设计考虑因素在设计TCP报文数据格式时,需要考虑以下因素:1.效率和可靠性:TCP需要提供高效的、可靠的数据传输服务,因此在设计报文格式时需要充分考虑这些需求。
例如,通过使用序列号和确认号,TCP 能够实现数据的排序和重传。
2.错误检测和纠正:为了确保数据的完整性,TCP提供了校验和机制。
校验和用于检测报文在传输过程中的错误,并在必要时进行纠正。
这有助于提高通信的可靠性。
3.流量控制和拥塞控制:TCP通过使用窗口机制进行流量控制和拥塞控制。
窗口大小字段用于表示接收窗口大小,而拥塞控制算法则用于避免网络拥塞。
竭诚为您提供优质文档/双击可除tcp协议实验报告篇一:Tcp实验报告Tcp实验报告一、实验目的1.深入理解Tcp原理,掌握连接状态控制、可靠传输等重要机制;2.为应用层提供网络编程接口,即socket接口。
二、实验要求1.理解Tcp的主要原理,针对客户端角色的、“停-等”模式的Tcp,设计接收和发送流程。
2.编程实现Tcp段的接收流程,重点是段接收的有限状态机3.编程实现Tcp段的发送流程,完成Tcp段的封装处理。
4.编程实现客户端socket接口函数三、编程实现1.停-等协议的实现停-等协议主要体现在stud_tcp_send()函数和stud_tcp_recv()和函数中。
实现的主要思路是:a)调用stud_tcp_send()发送一个数据包时,直到收到ack包并把ack交给stud_tcp_input()处理才退出b)调用stud_tcp_recv()接收一个数据包成功后,紧接着发送一个相应的ack包才退出上述两个设计保证了发送和接收窗口大小为12.接收流程的有限状态机首先检查校验和与序号是否正确,只有当这两者都无误之后才进入状态机部分。
状态机基于switch结构实现,根据当前Tcb的状态分情形讨论状态的变化。
处理流程如下3.发送时的封装和有限状态机a)查看当前的Tcb是否为空,为空则创建当前的Tcbb)封装数据i.ii.iii.iv.v.vi.拷贝数据设置源端口和目的端口设置包序列和ack 序号设置包头长度设置flag设置windowsize和urgentpointerc)改变状态d)变换字节序将字节序从本地序变成网络序4.各接口函数的实现a)stud_tcp_socket()b)stud_tcp_connect()c)stud_tcp_send()d)stud_tcp_recv()e)stud_tcp_close()5.校验和的计算与Ip包的校验类似,但是要求对伪首部进行校验伪首部由以下部分组成:a)32位Ip源地址b)32位Ip目的地址篇二:Tcp协议实验网络课第四次上机实验报告实验内容实验内容主要包括:?设计保存Tcp连接相关信息的数据结构(Tcb);?Tcp协议的接收处理和封装发送;?Tcp协议提供的socket函数接口。
实验6 TCP和UDP数据包发送与接收一、实验目的TCP协议是TCP/IP协议族的核心协议之一。
熟悉TCP包结构对于理解网络层次结构,以及TCP协议与IP协议的关系有着重要意义。
根据TCP协议的基本原理,通过封装与发送一个标准的TCP数据包,了解TCP包结构中各字段的含义与用途,从而深入理解传输层与下面各层的关系。
二、实验要求(1)掌握TCP/UDP报头结构、各字段含义以及校验和计算方法;(2)使用Wincap(Lipcap)构造并发送TCP,UDP数据包;(3)使用原始套接字(Raw Socket)发送自定义的TCP,UDP数据包;(4)使用NDIS协议驱动发送自定义的TCP/UDP数据包。
三、实验内容实验一SOCKET编程实验实验内容1、通过调试、运行“UDPClient”和“UDPServer”实验程序,加强对网络通讯原理的了解。
(或“简单Client”和“简单Server”实验程序,下同)2、学习分析实验程序功能结构,了解基于SOCKET编程的网络通信软件的基本设计方法。
3、在所提供的”UDPClient”和“UDPServer”实验程序基础上,完善程序功能。
4、通过实验学习和了解SOKCET通信的实现方法。
实验结果分析与总结(1)总结运行”UDPClient”和“UDPServer”实验程序的运行情况。
UDPClient运行结UDPServer运行结果(2)设计交互程序的运行结果如下:(3)总结程序设计的情况,列出所设计或修改部分的源代码清单。
附上程序源代码。
Client端修改的代码如下://(3)开始接收或发送过程printf("\n------------- waiting for message from Seaver -------------\n");//进入一个循环while (1){//输入并发送信息给服务器buffer[0]='\0'; //先清空发送缓冲区printf("\n Input datagram send info ( quit 退出 ): "); //输入发送字符串scanf("%s",buffer);sendto(socketid,buffer,sizeof buffer,0,(struct sockaddr*)&server,server_len);//发送信息//控制循环退出if(strcmp(buffer,"quit") == 0) //输入为quit则结束{ printf("\n send info quit");return 0;}//接收服务器返回信息buffer[0]='\0'; //先清空接收缓冲区if(recvfrom(socketid,buffer,sizeof buffer,0,(struct sockaddr*)&server,&server_len)!=SOCKET_ERROR) //接收返回信息{printf("Received datagram from --%s\n",buffer);}}closesocket(socketid); //关闭SOCKET连接WSACleanup(); //退出使用wsock32.dll动态链接库return 0;}Seaver端修改的代码如下:printf("\n------------- waiting for message from client -------------\n");//进入一个循环while (1){buffer[0]='\0';if(recvfrom(socketid,buffer,sizeofbuffer,0,(structsockaddr*)&client,&client_len)!=SOCKET_ERROR){printf("Received datagram from --%s\n",buffer);//给cilent发信息// char ack[100] = "recv ok!";// sendto(socketid,ack,sizeof ack,0,(struct sockaddr*)&client,client_len);}buffer[0]='\0';printf("\n Input datagram send info ( quit 退出 ): "); //输入发送字符串scanf("%s",buffer);sendto(socketid,buffer,sizeof buffer,0,(struct sockaddr*)&client,client_len); //发if(strcmp(buffer,"quit") == 0) //输入为quit则结束{printf("\n send info quit");return 0;}//Sleep(500);}closesocket(socketid);WSACleanup();return 0;}总结:在Client端接收返回信息发送信息和Seaver接收返回信息发送信息前都要进行清空接收缓冲区。
综合课程设计报告基于 TCP协议的文件传输系统学生姓名:指导教师:所在系:所学专业:年级:2011年6月目录摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2 1、的相关知 (3)1.1 、通信的模式 (3)1.1.1 、的可靠性 (3)1.2.1 、 TCP/IP 的网体系构 (3)1.2.2 、 TCP/IP 网 (4)1.2 . 3、 TCP——控制 (4)2、winsock 控件 (5)2.1.1 、 winsock 的重要属性、方法和事件 (5)2.1.2 、 winsock 控件通信的工作原理 (7)3、程序与 (8)3.1 、程序 (8)3.1.1 、体 (8)3.1.2 、模 (9)3.2 、程序 (10)3.2.1 、工作原理 (10)3.2.2 、服器端主程序 (11)3.2.3 、客端主程序 (14)4、 (17)参考文献...........................................................................................................17.成定 (18)基于TCP协议的文件传输系统摘要随着网络的普及,网络编程显得尤其重要。
本实验使用Winsock 控件实现两台计算机间的文件传输,描述了Winsock 控件的使用方法及有关文件传输的算法。
随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP 协议最为流行。
本文讨论的Winsock 控件,提供了访问TCP/IP 网络的捷径,使用它可以不必了解TCP/IP 的细节和调用Winsock API ,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。
同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。
计算机网络实验报告 tcp协议计算机网络实验报告:TCP协议一、引言计算机网络是现代社会中不可或缺的一部分,而其中最重要的组成部分之一就是传输控制协议(TCP)。
TCP协议是一种可靠的、面向连接的协议,它在保证数据可靠传输的同时,提供了流量控制和拥塞控制等重要功能。
本实验旨在深入了解TCP协议的原理和工作机制,通过实际操作和观察,进一步加深对TCP协议的理解。
二、实验目的1. 了解TCP协议的基本原理和工作机制;2. 熟悉TCP连接的建立和终止过程;3. 掌握TCP的流量控制和拥塞控制机制;4. 通过实验验证TCP协议的可靠性和效率。
三、实验环境本实验使用了一台运行着Linux操作系统的计算机,通过该计算机可以模拟TCP协议的各种操作和行为。
四、实验步骤1. TCP连接的建立在本实验中,我们使用了一个简单的客户端-服务器模型来模拟TCP连接的建立过程。
首先,在服务器端启动一个监听进程,等待客户端的连接请求。
然后,在客户端发起连接请求时,服务器接受该请求,并建立一个TCP连接。
在这个过程中,可以观察到TCP三次握手的过程,即客户端发送SYN包,服务器回应SYN+ACK包,最后客户端发送ACK包,完成连接的建立。
2. TCP连接的终止TCP连接的终止过程也是一个重要的实验内容。
在本实验中,我们通过发送一个特殊的FIN包来终止一个已建立的TCP连接。
在终止过程中,可以观察到TCP四次挥手的过程,即一方发送FIN包,另一方回应ACK包,然后另一方也发送FIN包,最后再回应ACK包,完成连接的终止。
3. TCP的流量控制TCP通过使用滑动窗口机制来实现流量控制。
在本实验中,我们可以通过调整滑动窗口的大小,观察到数据发送和接收的速度变化。
当滑动窗口的大小较小时,发送方发送的数据量较小,接收方的处理速度较慢;而当滑动窗口的大小较大时,发送方发送的数据量较大,接收方的处理速度较快。
通过实验可以验证TCP流量控制的有效性。
一、实验目的1. 深入理解TCP 原理,掌握连接状态控制、可靠传输等重要机制;2. 为应用层提供网络编程接口,即socket 接口。
二、实验要求1. 理解TCP 的主要原理,针对客户端角色的、“停-等”模式的TCP,设计接收和发送流程。
2. 编程实现TCP 段的接收流程,重点是段接收的有限状态机3. 编程实现TCP 段的发送流程,完成TCP 段的封装处理。
4. 编程实现客户端Socket 接口函数三、编程实现1. 停-等协议的实现停-等协议主要体现在stud_tcp_send()函数和stud_tcp_recv()和函数中。
实现的主要思路是:a) 调用stud_tcp_send()发送一个数据包时,直到收到ack 包并把ack 交给stud_tcp_input()处理才退出b) 调用stud_tcp_recv()接收一个数据包成功后,紧接着发送一个相应的ack 包才退出上述两个设计保证了发送和接收窗口大小为12. 接收流程的有限状态机首先检查校验和与序号是否正确, 惟独当这两者都无误之后 才进入状态机部份。
状态机基于 switch 结构实现, 根据当前 TCB 的状态分情形讨 论状态的变化。
处理流程如下3. 发送时的封装和有限状态机a) 查看当前的 TCB 是否为空,为空则创建当前的 TCBb) 封装数据拷贝数据设置源端口和目的端口设置包序列和 ack 序号设置包头长度设置 flag设置 windowsize 和 urgentPointerc) 改变状态i . ii . iii . iv . v .vi .d) 变换字节序将字节序从本地序变成网络序4. 各接口函数的实现a) stud_tcp_socket()b) stud_tcp_connect()c) stud_tcp_send()d) stud_tcp_recv()e) stud_tcp_close()5. 校验和的计算与IP 包的校验类似,但是要求对伪首部进行校验伪首部由以下部份组成:a) 32 位IP 源地址b) 32 位IP 目的地址c) 8 位填充位(全0)d) 8 位协议号e) 16 位TCP 头部长度四、实验遇到的问题1. 校验和的计算问题难点在于理解伪首部的结构和作用。
湖北工业大学
课程设计报告
设计题目: TCP数据包的发送和接收
专业: 计算机科学与技术
班级: 10计科2班
学号:
姓名: 吕红杰
指导老师: 涂军
一.设计题目
发送和接收TCP数据包
二.设计要求
1.正确理解题意;
2.具有良好的编程规范和适当的注释;
3.有详细的文档, 文档中应包括设计题目涉及的基础知识、设计思路、程序流程图、程序清单、开发中遇到的问题及解决方法、设计中待解决的问题及改进方向。
三.需求分析
TCP是一种面向连接的、可靠的传输层协议。
TCP协议工作在网络层IP协议的基础上。
本课程设计的目的是设计一个发送和接收TCP数据包的程序, 其功能是填充一个TCP数据包, 发送给目的主机, 并在目的主机接收此TCP数据包, 将数据字段显示显示在标准输出上。
四.具体设计
1.创立一个原始套接字, 并设置IP头选项
SOCKET sock;
sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
或者:
sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,W
SA_FLAG_OVERLAPPED);
这里, 设置了SOCK_RAW标志, 表示我们声明的是一个原始套接字类型。
为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。
在本课程设计中, 发送TCP包时隐藏了自己的IP地址, 因此我们要自己填充IP头, 设置IP头操作选项。
其中flag设置为ture, 并设定IP_HDRINCL 选项, 表明自己来构造IP头。
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag));
int timeout=1000;
setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout));
在这里我们使用基本套接字SOL_SOCKET, 设置SO_SNDTIMEO 表示使用发送超时设置, 超时时间设置为1000ms。
2.构造IP头和TCP头
这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。
typedef struct _iphdr //定义IP首部
{
UCHAR h_lenver; //4位首部长度+4位IP版本号
UCHAR tos; //8位服务类型TOS
USHORT total_len; //16位总长度( 字节) USHORT ident; //16位标识
USHORT frag_and_flags; //3位标志位
UCHAR ttl; //8位生存时间TTL
UCHAR proto; //8位协议(TCP, UDP 或其它) USHORT checksum; //16位IP首部校验和ULONG sourceIP; //32位源IP地址
ULONG destIP; //32位目的IP地址
}IP_HEADER;
typedef struct psd_hdr //定义TCP伪首部
{
ULONG saddr; //源地址
ULONG daddr; //目的地址
UCHAR mbz; //没用
UCHAR ptcl; //协议类型
USHORT tcpl; //TCP长度
}PSD_HEADER;
typedef struct _tcphdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
ULONG th_seq; //32位序列号
ULONG th_ack; //32位确认号
UCHAR th_lenres; //4位首部长度/6位保留字
UCHAR th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;
3.计算校验和的子函数
在填充数据包的过程中, 需要调用计算校验和的函数checksum两次, 分别用于校验IP头和TCP头部( 加上伪头部) , 其实现代码如下:
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);
}
4.流程图
五.实验内容
1.先用vc++编译运行程序代码
2.用命令指示符运行Debug下的sendTCP
3.输入源ip和端口及目的ip和端口。