TCPIP协议分析与编程实验报告文档格式.docx
- 文档编号:16366582
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:32
- 大小:516.35KB
TCPIP协议分析与编程实验报告文档格式.docx
《TCPIP协议分析与编程实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《TCPIP协议分析与编程实验报告文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
(3)断开与服务器的连接。
(1)服务器创建数据报套接字,等待接收客户数据。
(2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。
【开发环境】
1、操作系统:
Windows7操作系统
2、Winpcap开放代码函数库
3、语言:
C++
4、整个程序的核心就是利用WindowsSocket进行网络设计实现,使用C/S结构
【背景知识】
时间协议(TIMEprotocol)是一个在RFC868内定义的网络协议。
它用作提供机器可读的日期时间资讯。
时间协议可以在TCP或UDP上使用。
在TCP上,主机会连接支援时间协议的服务器的TCP埠37。
服务器会传送32位二进制数字然后断开连接,数字表示由格林威治时间1900年1月1日午夜0时0分0秒至当时的总秒数。
主机在接收到时间后断开连接。
在UDP上,客户端会每送一个(通常为空的)数据包到UDP埠37。
服务器会把包含时间的数据包传回。
在过程中没有进行连线。
TCP
协议为终端设备提供了面向连接的、可靠的网络服务,UDP
协议为终端设备提供了无连接的、不可靠的数据报服务。
从下图我们可以看出,TCP
协议为了保证数据传输的可靠性,相对于UDP报文,TCP报文头部有更多的字段选项。
【设计思路】
系统客户端与服务端建立连接,发送同步请求到同步系统时间的流程图如下,在整个时间同步的过程中服务器必须处于工作状态,时刻监听客户端的请求信息,监听到客户端的时间同步请求时,根据客户端的需要,来进行服务响应,客户端在接收到服务器的响应报文后,根据算服务器发过来的时间来同步系统时间。
【核心代码】
TCPserver:
//获取系统时间
printf("
服务器端系统时间为:
"
);
time_ttimep;
//间值time_t整型longint,保存19701月1000秒现刻秒数
structtm*p;
time(&
timep);
//获取1970到现在的秒数
p=localtime(&
//将秒数转换线现在的时间
//年份从1900年算起至今的年数
//月份从一月算起,范围从0-11
%.2d/%.2d/%.2d%.2d:
%.2d:
%.2d\n"
(p->
tm_year+1900),(1+p->
tm_mon),p->
tm_mday,p->
tm_hour,p->
tm_min,p->
tm_sec);
//ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
//printf("
当前时间:
%s"
asctime(p));
send_buf[0]=p->
tm_year;
send_buf[1]=p->
tm_mon;
send_buf[2]=p->
tm_mday;
send_buf[3]=p->
tm_hour;
send_buf[4]=p->
tm_min;
send_buf[5]=p->
tm_sec;
TCPclient:
//打印当前客户端时间
//取得当地时间
客户端当前时间:
printf("
\n"
//unsigned__cdecl_getsystime(structtm*);
获取系统时间
//unsigned__cdecl_setsystime(structtm*,unsigned);
修改系统时间
p->
tm_year=recv_buf[0];
tm_mon=recv_buf[1];
tm_mday=recv_buf[2];
tm_hour=recv_buf[3]-3;
tm_min=recv_buf[4];
tm_sec=recv_buf[5];
setsystime(p,0);
//修改系统时间p是结构体0是无符号日期没有符号
更新客户系统时间:
p->
tm_year+1900,p->
tm_mon+1,p->
修改成功!
UDP与TCP代码类似
【界面及运行结果】
UDPserver:
UDPclient:
实验二聊天程序设计
设计简单的客户/服务器程序实现客户和服务器相互收发数据直到一端输入“end”结束。
(或是客户创建数据报套接字)
(2)连接创建成功后,通过套接字向服务器持续发送或是接收数据。
(3)输入或是收到命令”end”,结束收发数据,并断开与服务器的连接。
(或是创建数据报套接字)
(3)通过套接字与客户持续发送或是接收数据。
(4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。
一个简单的聊天程序,对程序员的观点来看就是在多个1/0断电之间实现多对多的通信。
基于socket的局域网通信是一种灵活的、易于实现的、低成本的方法。
它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。
而在socketAPI的帮助下,开发基于socket的局域网通信软件也是易于实现的。
TCP(TransmissionControlProtocol)属于传输层协议。
其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。
通过面向连接、端到端和可靠的数据包发送。
通俗说,TCP支持的应用协议主要有:
Telnet、FTP、SMTP等
TCP是面向对象的连接,是安全可靠的,是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂。
每个TCP报文头部都包含源端口号(source
port)和目的端口号(destination
port),用于标识和区分源端设备和目的端设备的应用进程。
在TCP/IP协议栈中,源端口号和目的端口号分别与源IP地址和目的IP地址组成套接字(socket),唯一的确定一条TCP连接。
根据实验要求及功能设置可以得到如下流程图,启动服务器,服务器等待客户端发送信息,然后客户端就可以与服务端进行聊天,当客户端或服务器接受或者发送end命令时,就断开连接。
实验三TCP和UDP套接字综合应用
设计简单的客户/服务器,服务器实现并发同时响应客户的UDP通信要求,也能响应客户端发过来的TCP通信要求。
(1)TCP、UDP
(2)C/S
(3)多线程编程
TCP客户:
(2)连接创建成功后,通过套接字向服务器持续发送或是接收数据。
UDP客户:
(2)接收服务器返回的时间,更新客户系统时间。
(3)断开与服务器的连接。
针对TCP客户,提供的服务如下:
(2)当收到一个客户TCP连接请求,创建连接套接字同意与其创建连接。
(3)通过套接字与客户持续发送或是接收数据。
(4)输入或是收到”end“命令,结束与该客户的收发数据,断开连接。
针对UDP客户,提供的服务如下:
(2)接收客户发来的“time”命令,获取系统时间,通过套接字返回给客户。
而在socketAPI的帮助下,开发基于socket的局域网通信软件也是易于实现的
【设计思路】
在服务器上创建两个线程,分别用来接收TCP客户端的请求和UDP客户端的请求
系统客户端与服务端建立连接,在整个时间同步的过程中服务器必须处于工作状态,时刻监听客户端的请求信息,监听到客户端的时间同步请求时,根据客户端的需要,来进行服务响应,客户端在接收到服务器的响应报文后,根据算服务器发过来的时间来同步系统时间。
启动服务器,服务器等待客户端发送信息,然后客户端就可以与服务端进行聊天,当客户端或服务器接受或者发送end命令时,就断开连接。
Server:
//创建线程
structTcpThreadParam
{
SOCKETsocket;
//通信套接字
sockaddr_inaddr;
//
};
DWORDWINAPITcpSerThread(LPVOIDlpParam);
//TCP接收数据线程函数
DWORDWINAPIUdpSerThread(LPVOIDlpParam);
//UDP接收数据线程函数
DWORDWINAPITcpSerRecvThread(LPVOIDlpParam);
DWORDWINAPITcpSerSendThread(LPVOIDlpParam);
//TCP发送数据线程函数
//UDP接收数据线程函数
DWORDWINAPIUdpSerThread(LPVOIDlpParam)
{
WSADATAwsaData;
intiport=DEFAULT_PORT;
//服务器进程端口号
SOCKETsSocket;
//服务器套接字
SOCKETsServe;
structsockaddr_inser,cli;
//服务器地址,客户端地址
intiLen;
charsend_buf[BUF_LENGTH];
//发送缓存
charrecv_buf[BUF_LENGTH];
//接收缓存
intiSend,iRecv;
//接收数据和发送数据长度
time_trawtime;
//time_t是long型
structtm*timeinfo;
//时间的结构体
//TCP接收数据线程函数
DWORDWINAPITcpSerRecvThread(LPVOIDlpParam)
//接收缓存
intiRecv;
//获取线程参数
SOCKETsAccept=((TcpThreadParam*)lpParam)->
socket;
SOCKADDR_INSerAddr=((TcpThreadParam*)lpParam)->
addr;
while
(1)
iRecv=recv(sAccept,recv_buf,sizeof(recv_buf),0);
if(iRecv==SOCKET_ERROR)//接收错误
{
printf("
recv()Failed:
%d\n"
WSAGetLastError());
break;
}
elseif(!
strcmp(recv_buf,"
end"
))
else
clientsay:
%s\n"
recv_buf);
}
Client_end:
与实验二的end客户端一致
Client_time:
与实验一的time客户端一致
Server:
实验四Web服务器
设计一个简单的web服务器,它仅能处理一个请求。
Web服务器:
(1)当一个客户(浏览器,输入URL:
http:
//127.0.0.1/index.html)连接时创建一个连接套接字;
(2)从连接套接字接收http请求报文。
(3)解释该请求以确定所请求的文件(解析文件名);
(4)从服务器的文件系统获得请求的文件。
(5)创建一个由请求的文件组成的http响应报文。
(报文包含状态行+实体体)。
(6)经TCP连接想请求的浏览器发送响应。
如果浏览器请求的文件不在服务器,服务器返回“404NotFound”差错报文。
HTTP
协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。
HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。
由于HTTP协议支持的服务不限于WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。
它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。
C/S网络架构
客户端/服务器架构,通常情况下,数据存储在服务器端,客户端和服务器端都有一个独立的应用程序,可以进行独立的操作,通过网络进行数据传输。
常用的传输协议包括:
TCP/IP:
基于连接的协议
优点:
由于是有连接的传输,对于数据的准确性是有保证的。
缺点:
系统资源占用较多。
UDP/IP:
无连接的协议(数据报)
系统资源占用少。
无法保证传输的准确性。
(1)
创建ServerSocket类对象,监听端口5050。
这是为了区别于HTTP的标准TCP/IP端口80而取的;
(2)
等待、接受客户机连接到端口5050,得到与客户机连接的socket;
(3)
创建与socket字相关联的输入流instream和输出流outstream;
(4)
从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:
GET
路径/文件名
HTTP/1.1
(5)
从请求信息中获取请求类型。
如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。
没有HTML文件名时,则以index.html作为文件名;
(6)
如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。
否则发送错误404NotFound;
(7)
关闭与相应Web浏览器连接的socket字。
可以总结出Web服务器的设计流程并作出其设计流程图,如图
//接收成功,打印接收数据,打印出http请求报文的内容
recvdatafromclient:
char*p;
p=strtok(recv_buf,"
"
strcpy(command,p);
command=%s\n"
command);
p=strtok(NULL,"
strcpy(filename,p+1);
filename=%s\n"
filename);
while(p!
=NULL)
{
p);
}
if(strlen(filename)==0)
strcpy(filename,"
index.html"
//获取请求的文件名,打开文件
inti=0,len;
fp=fopen(filename,"
r"
//打开文件
if(fp)//打开成功
fseek(fp,0L,SEEK_END);
//求文件长度,先定位指针到文件尾
len=ftell(fp);
//计算文件长度
fseek(fp,0L,SEEK_SET);
//重置指针至文件头
memset(read_file_buf,0,sizeof(recv_buf));
fr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCPIP 协议 分析 编程 实验 报告