《计算机网络》课程设计报告.docx

上传人:b****3 文档编号:2793094 上传时间:2022-11-15 格式:DOCX 页数:19 大小:263.22KB
下载 相关 举报
《计算机网络》课程设计报告.docx_第1页
第1页 / 共19页
《计算机网络》课程设计报告.docx_第2页
第2页 / 共19页
《计算机网络》课程设计报告.docx_第3页
第3页 / 共19页
《计算机网络》课程设计报告.docx_第4页
第4页 / 共19页
《计算机网络》课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

《计算机网络》课程设计报告.docx

《《计算机网络》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《计算机网络》课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

《计算机网络》课程设计报告.docx

《计算机网络》课程设计报告

 

海南大学信息科学技术学院

《计算机网络》课程设计报告

 

班级:

计算机科学与技术一、三班

组员:

指导老师:

完成日期:

2011年12月15日

 

【摘要】本设计采用MFC6.0作为开发工具,其中第2部分编写UDP客户/服务器程序

编写程序,实现了以下要求:

(1)使用UDP服务实现客户端与服务器交互信息

(2)有运行截图;其中第3部分发送TCP数据包本设计的目的是填充一个TCP数据包,并发送给目的主机;其中第4部分简单FTP功能模拟编写程序,设计客户/服务器实现小型文件传输,采用了TCP协议。

 

【关键词】UDP,TCP,FTP

1、引言

UDP(UserDatagramProtocol)是用户数据包协议的缩写。

TCP(TransmissionControlProtocol)是传输控制协议的缩写。

FTP(FileTransferProtocol)是文件传输协议的缩写

2、编写UDP客户/服务器程序

使用UDP服务实现客户端与服务器交互信息

2.1.UDP服务端设计

主要用于对客户端进行连接

2.1.1、UDP服务端主窗体设计

设计主窗体如图2.1所示。

 

图2.1服务器端主窗体

 

2.1.2、服务器端源代码

#include

#include

#include

#defineDEFAULT_PORT5050

#defineBUFFER_LENGTH1024

#pragmacomment(lib,"WS2_32.lib")

voidmain()

{

intiPort=DEFAULT_PORT;

WSADATAwsaData;

SOCKETsSocket;

intiLen,iRecv,iSend;

structsockaddr_inser,cli;

charsend_buf[]="Hollo!

Iamaserver";

charrecv_buf[BUFFER_LENGTH];

printf("--------------------");

printf("Serverwaiting");

printf("--------------------");

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("环境初始化错误:

\n");

return;

}

sSocket=socket(AF_INET,SOCK_DGRAM,0);

if(sSocket==INVALID_SOCKET)

{

printf("socket()函数调用失败:

\n",WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)

{

printf("bind()函数调用失败:

\n",WSAGetLastError());

return;

}

iLen=sizeof(cli);

memset(recv_buf,0,sizeof(recv_buf));

while

(1)

{

iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);

if(iRecv==SOCKET_ERROR)

{

printf("recvfrom()函数调用失败:

\n",WSAGetLastError());

break;

}

elseif(iRecv==0)

break;

else

{

printf("recvfrom():

%d\n",recv_buf);

printf("客户端的IP地址、端口号:

%d\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));

}

iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli));

if(iSend==SOCKET_ERROR)

{

printf("sendto()函数调用失败:

\n",WSAGetLastError());

break;

}

elseif(iSend==0)

break;

else

{

printf("sendto():

调用成功!

\n");

}

}

closesocket(sSocket);

WSACleanup();

}

2.2、客户机端设计

主要用于对服务器端进行连接,并发送数据,及接收服务器端发送过来的数据。

2.2.1、客户机端主窗体设计

设计主窗体如图2.2所示。

图2.2客户机端主窗体

2.2.2、客户机端主窗体设计源代码

#include

#include

#include

#defineDEFAULT_PORT5050

#defineDATA_BUFFER1024

#pragmacomment(lib,"WS2_32.lib")

voidmain(intargc,char*argv[])

{

WSADATAwsaData;

SOCKETsClient;

intiPort=5050;

intiLen;

intisend,iRecv;

charsend_buf[]="Hello!

Iamaclient";

charrecv_buf[DATA_BUFFER];

structsockaddr_inser;

if(argc<2)

{

printf("输入服务器的IP地址:

\n");

return;

}

else

memset(recv_buf,0,sizeof(recv_buf));

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("Winsock环境初始化失败:

\n");

return;

}

sClient=socket(AF_INET,SOCK_DGRAM,0);

if(sClient==INVALID_SOCKET)

{

printf("socket()函数调用失败:

%d\n",WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=inet_addr(argv[1]);

iLen=sizeof(ser);

isend=sendto(sClient,send_buf,sizeof(send_buf),0,(structsockaddr*)&ser,iLen);

if(isend==SOCKET_ERROR)

{

printf("sendto()函数调用失败:

%d\n",WSAGetLastError());

return;

}

elseif(isend==0)

return;

else

printf("sendto()调用成功:

\n");

iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(structsockaddr*)&ser,&iLen);

if(iRecv==SOCKET_ERROR)

{

printf("recvfrom()函数调用失败:

%d\n",WSAGetLastError());

return;

}

elseif(iRecv==0)

return;

else

{

printf("sendto():

%s\n",recv_buf);

printf("-------------------------------\n");

}

closesocket(sClient);

WSACleanup();

}

2.3、运行结果

 

3发送TCP数据包

实现了填充一个TCP数据包,并发送给目的主机。

 

3.1构造IP头和TCP头

代码如下:

ypedefstruct_iphdr//定义IP首部

{

UCHARh_lenver;//4位首部长度+4位IP版本号

UCHARtos;//8位服务类型TOS

USHORTtotal_len;//16位总长度(字节)

USHORTident;//16位标识

USHORTfrag_and_flags;//3位标志位

UCHARttl;//8位生存时间TTL

UCHARproto;//8位协议(TCP,UDP或其他)

USHORTchecksum;//16位IP首部校验和

ULONGsourceIP;//32位源IP地址

ULONGdestIP;//32位目的IP地址

}IP_HEADER;

typedefstructpsd_hdr//定义TCP伪首部

{

ULONGsaddr;//源地址

ULONGdaddr;//目的地址

UCHARmbz;//没用

UCHARptcl;//协议类型

USHORTtcpl;//TCP长度

}PSD_HEADER;

typedefstruct_tcphdr//定义TCP首部

{

USHORTth_sport;//16位源端口

USHORTth_dport;//16位目的端口

ULONGth_seq;//32位序列号

ULONGth_ack;//32位确认号

UCHARth_lenres;//4位首部长度/6位保留字

UCHARth_flag;//6位标志位

USHORTth_win;//16位窗口大小

USHORTth_sum;//16位校验和

USHORTth_urp;//16位紧急数据偏移量

}TCP_HEADER;

 

3.2.计算校验和的子函数

实现代码如下:

USHORTchecksum(USHORT*buffer,intsize)

{

unsignedlongcksum=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);

}

3.3程序总源代码:

#include

#includ

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1