《发送TCP数据包实验报告.docx》由会员分享,可在线阅读,更多相关《发送TCP数据包实验报告.docx(9页珍藏版)》请在三一办公上搜索。
1、南昌航空大学课程设计说明书课程设计名称:课程设计题目:学院名称:专业:发送TCP数据包班级:学号: 姓名: 评分: 教师:2011年12月28日一、课程设计目的TCP是一种面向连接的、可靠的传输层协议。TCP协议是在网结层IP协议的基础上, 向应用层用户进程提供可靠的、全双工的数据流传输。该课程设计的目的就是设计一个发送 TCP数据包的程序,综合运用书本课程及计算机网结的相关知识设计并实现一个网络应用程 序,用Microsoft Visual C+ 6.0作为开发平台,通过实践复习巩固课堂所学的理论知识, 提高对所学知识的综合应用能力。二、课程设计要求课本上本来的要求是填充一个TCP数据包,并
2、发送给主机,要求如下:1)以命令的形式运行:SendTCP sourcejp source_port destjp dest_prot其中SendTCP为程序名:source_ip为源端IP地址;source_port为源端I I: destjp 为目的IP地址;dest_prot为目的端口。2)其他的TCP头部参数是自行设定的。3)数据字段为“This is my homework of network J am happy!”。4)成功发送后在屏幕上输出“send OK!”。但是老师要求需要一个接收TCP数据包。因此经过大家的讨论分析以及老师的指导后我们确定将功能扩展为设计一个接收TCP数
3、 据;接收方和发送方通过服务器相互进行可靠的TCP/IP通信以及很好的人机交互界面,采用 采用客户/服务器模式,分为客户端程序和服务器端程序。服务器采用WINSOCK I/O模型中的 任一种,支持多个客户同时在线聊天。客户端程序和服务器程序通过网络交换聊天字符串内 容,服务器窗I I的列表框中显示当前在线用户,当其退出时就将其从该在线用户窗I I中除去, 尽量去实现客户端和客户端之间的私聊。三、相关知识及设计原理当应用进程有报文要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传输实 体。TCP传输实体将用户数据加上TCP报头,形成TCP数据包,在TCP数据包上增加IP头部形成 IP
4、包。TCP数据包和IP包的关系如下图1.1所示:TCP报头TCP数据P1IP报头IP数据图1 TCP数据包加上IP报头形成IP包当应用进程有报文需要通过TCP发送时,它就将此应用层报文传送给执行TCP协议的传 输实体。TCP传输实体将用户数据加上TCP报头形成TCP数据包,在TCP数据包上增加IP 头部形成IP包。TCP协议的数据传输单元称为报文段。报文段包头的长度为20B60B其 中固定长度是20B,选项部分长度最多为40B,包以下字段:端I I号:端I I号字段包括源端I I号和目的端I I号。每个端I I号的长度是16位,分别表示发送 TCP包的应用进程的端I号和接收该TCP包的应用进程
5、的端口号。序号:长度为32位。由于TCP协议时面向数据流的,它所传送的报文字段可以视为连续的数 据流,因此需要给每个字节编号。序号字段的“序号”指本报文段数据的第一个字节 的序列号。确认号:该字段的长度为32位,它表示接收希望接收的下一个TCP包的第一个字节的序号。报头的长度:4位长度。TCP报头长度以4B为一个单元计算的,实际上报头长度在20B、60B之 间,因此该字段值在5、15之间。保留:长度为6位,留做今后使用,目前置0。控制:该字段有6种不同标志,每个标志占一位,在同一时间可设置一位或多位。URG为1时 表明有要紧急处理的数据:ACK为1时表明确认号字段有效:PSH为1时表明要强制切
6、断 连接。SYN为1时表明有确立连接请求,把序号字段的初始值作为序号字段值以便开始 通信;FIN为1时表明发送方己经没有数据可发。窗I大小:16位长度紧急指针;选项;校验和。TCP头部数据1516端口号目的端口号序号确认号报头长度保留UGRACK PSH SYNFIN校验和紧急指针选项及填充图2 TCP数据包头部的格式四、设计分析及功能扩展本课程设计原始目的是发送一个TCP数据包,但是经过最后商定以及不断的修改功能扩 展为做一个类似聊天工具的程序。我们使用的工具是Microsoft Visual C+ 6. 0,界面用MFC 制作,则就要使用到套接字csocket来完成该工作。套接字csock
7、et中包含了很多函数,部分 如下:1) Create ()创建一个套接字2) Listen()侦听3) Bind。绑定4 ) Connect 0建立连接5) Send。发送数据6) Receive0接收数据7 ) Close ()关闭该套接字五、工作环境操作系统:Windows 2000/XP实验环境:Microsoft Visual C+ 6. 0 编程语言:VC+六、代码及分析在该课程设计中任务是平均分配的,两位实现客户端,另两位实现服务器端,我负责的 是客户端的连接函数Onconnet ()和接收功能onrevO。1)客户端的连接函数Onconnet ()代码和分析如下:void CTc
8、pclientDlg:Onconnet0GetDlgltemText(IDC_EDIT5, clientname);if (clientname=,z )(MessageBox(请输入用户名);else(if(clconect)clconect. Close 0;CString ipstr, portstr;int port;GetDlgltemText(IDC_EDIT1, ipstr);GetDlgltemText(IDC_EDIT2, portstr);GetDlgltemText(IDC_EDIT5, clientname);portstr. TrimLeft 0;portstr. T
9、rimRight 0;port=atoi(portstr);if (port0&portEnableWindow(false);cw=GetDlgItem(IDC_EDIT2);cEnableWindow(false);cw=GetDlgItem(IDC_connet);cwEnableWindow(false);cw=GetDlgItem(IDC_EDIT5);cwEnableWindow(false);SetDlgltemText (IDC_EDIT3, clientname+rn连接服务器成功 ”);CString enterinfo=clientname+w进入聊天室; int len
10、 二 enter info. GetLengthO ;clconect. Send(enterinfo, len);elseclconect. Close ();MessageBoxC连接失败,请检查IP与端I是否与服务器一致!或 者服务器没打开,连接错误,IB_ICONERROR);elseMessageBoxC端I I或IP输入有误,请重新输入);/ 在登录服务器的时候会根据不同的情况出现不同的错误。在设计过程中,将clientname作为首要考虑对象,若没有输入账号则弹出一个对话框提 醒用户输入账号,只有输入了正确的账号才能进行登录。但同时,端I】号也有限制,只在 1-9998之间,旦若
11、和服务器的端II号不相同则登录不成功,则提醒用户:连接失败,请检查 IP与端I I是否与服务器一致!或者服务器没打开。若连接成功,则启用该套接字,将IP, PORT, 及clientname的编辑框设为不可编辑。发送使用Send()函数,该函数的内容从发送的编辑框 中获得,使用SetDlgltemText (IDC_EDIT3, clientname+rn连接服务器成功)。情况有以下一些情况:我的账号:聊天区图3没有输入用户名月艮务器信息设置服务器名称: 磨膏端口: H开启监听IL 101子反.理田白图4端I I号和服务器的不一致图5 没有打开服务器我的账号:|酝聊天区图6成功后在客户端显示的
12、内容聊天区初TCP多用户聊天器J辰务捋端图7成功后在服务器端显示的内容2)接收功能。nrev()代码和分析如下:void CTcpclientDlg::onrev()CString str,strl;char ss100;for(int j=0;jLineScroll(ce*GetLineCount()-1);在接收信息时最主要的是设置一个缓冲区,从其他客户端或者服务器发过来的信息不可 能一次性就完全接收的,需要一个过渡。使用Receive ()函数获取信息,该函数用于从套接 字获取数据,其放置在缓冲区得到的是字符数组形式,需要用str. Format (sss)将其转 化为字符串形式,str=strl+rn+str;就能完成这一功能,而且聊天区的条目要向下滚动七、界面展示客户端的界面如下:八、实验体会计算机网络是一门比较重要的专业课,它设计的内容主要就是协议。对各个层的协议搞清楚了,并对其相应的算法有一定的了解就掌握了计算机网络 这门课程。在做这个实验的过程中,我查阅了很多资料,自己收获颇深。通过做发送TCP 数据包的课程设计,我还对TCP数据包的传送有了更深刻的认识,了解了 TCP数据包、IP 数据包的格式,并了解了 TCP协议与IP协议的关系,让我对TCP协议的工作原理有了更深入 的认识。