




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告课 程 计算机网络(双语)(课程设计) 实验名称 UDP及TCP通信程序的设计与实现 专业班级 姓 名 学 号 2013 年 5 月 30 日目录实验目的和内容1实验目的1实验内容1实验环境2程序的逻辑框图2UDP通信程序的逻辑框图:2TCP通信程序的逻辑框图:3程序源代码(数据结构的描述、核心算法)41.TCP通信程序源代码42.TCP通信程序数据结构的描述73.TCP通信程序的核心算法74.UDP通信程序源代码85.UDP通信程序数据结构的描述116.UDP通信程序的核心算法12实验数据、结果分析13TCP通信程序实验结果分析13UDP通信程序实验结果分析14总结16实验目的和内容实验目的掌握win32平台下,使用winsock API来实现UDP通信程序和TCP通信程序。实验内容1. 实现控制台模式下,在单机上基于UDP的聊天程序;2. 实现控制台模式下,在单机上基于TCP的聊天程序;3. 上述两个程序,最简单的实现方式是:一方发送、另一方接收、交替进行;4. 提交上述2个程序的源程序,程序代码有充分的注释,并填写实验报告,实验报告的主要内容为说明程序设计的思路,程序代码的流程。实验环境在win7系统下,visual studio 2008环境下的win32平台下程序的逻辑框图UDP通信程序的逻辑框图:TCP通信程序的逻辑框图:程序源代码(数据结构的描述、核心算法)1.TCP通信程序源代码Client端:#include stdafx.h#include #include #include #include /初始化函数,初始化版本号int InitSock(BYTE minorVer = 2, BYTE majorVer = 2)WSADATA wsaData;WORD sockVersion = MAKEWORD(minorVer, majorVer);if(WSAStartup(sockVersion, &wsaData) != 0)exit(0);return 1;int main()char rbuf256;char szText256;InitSock();/创建socket,第一个参数表示用IP协议,第二个参数表示用TCP传输,第三个不大清楚SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);/判断socket是否创建成功if(sListen = INVALID_SOCKET)printf(Failed socket() n);return 0;/用于存储IP地址和端口号的变量sockaddr_in sin;sin.sin_family = AF_INET;/IP协议sin.sin_port = htons(4567);/端口号sin.sin_addr.S_un.S_addr = INADDR_ANY; /接收任何IP的连接/绑定函数,将socket 与 IP地址和端口 绑定在一块if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin) = SOCKET_ERROR)printf(Failed bind() n);return 0;/开始监听,第二个参数表示最大连接数if(listen(sListen, 2) = SOCKET_ERROR)printf(Failed listen() n);return 0;/定义一个新的变量sockaddr_in remoteAddr;int nAddrLen = sizeof(remoteAddr);/用于存储连接客户端的socketSOCKET sClient;/accept函数会阻塞,直到等到有socket连接服务器为止,才继续往后执行,并将客户端的IP和端口号存在remoteAddr中sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);printf(接收到一个连接%s rn, inet_ntoa(remoteAddr.sin_addr);while(TRUE)if(sClient = INVALID_SOCKET)printf(Failed accept();continue;printf(send:);scanf(%s,szText);/发送函数,往sClient这个socket中发送szTextsend(sClient, szText, strlen(szText), 0);/recv为阻塞函数,等待sClient中传来数据int nRecv = recv(sClient, rbuf, 256, 0);if(nRecv0)rbufnRecv = 0;printf(receive:%sn, rbuf);closesocket(sClient);closesocket(sListen);WSACleanup();return 0;Server端:#include stdafx.h#include #include #include #include /初始化函数,初始化版本号int InitSock(BYTE minorVer = 2, BYTE majorVer = 2)WSADATA wsaData;WORD sockVersion = MAKEWORD(minorVer, majorVer);if(WSAStartup(sockVersion, &wsaData) != 0)exit(0);return 1;int main()InitSock();/创建socket,第一个参数表示用IP协议,第二个参数表示用TCP传输,第三个不大清楚SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(s = INVALID_SOCKET)printf( Failed socket() n);return 0;/用于存储IP地址和端口号的变量sockaddr_in servAddr;servAddr.sin_family = AF_INET;servAddr.sin_port = htons(4567);/要连接的端口号servAddr.sin_addr.S_un.S_addr = inet_addr(127.0.0.1);/要连接的IP地址/连接函数,是一个阻塞类型的函数,用s这个socket与服务器地址的某个端口连接,之后往s这个socket中写数据,服务器就能收到if(connect(s, (sockaddr*)&servAddr, sizeof(servAddr) = -1)printf( Failed connect() n);return 0;char buff256;char szText256;while(true)/接收函数,是一个阻塞类型的函数,等待s这个socket中传来数据,256表示接收的最大字符数int nRecv = recv(s, buff, 256, 0);if(nRecv 0)buffnRecv = 0;printf(receive:%sn, buff);printf(send:);scanf(%s,szText);/发送函数,往s这个socket中发送szText这个字符串send(s, szText, strlen(szText), 0);closesocket(s);WSACleanup();return 0;2.TCP通信程序数据结构的描述(1)客户端及服务器都含有存储IP地址及端口号的数据结构,sockaddr_in remoteAddr; 和servAddr(2)用于存储连接客户端的socket: SOCKET sClient;和用于存储连接服务器的socket:SOCKET s3.TCP通信程序的核心算法服务器首先启动,通过调用socket( )建立一个套接口,然后bind( )将该套接口和本地地址(IP地址和端口)联系在一起,再listen( )使套接口做好侦听的准备,并规定它的请求队列的长度, 之后就调用accept( )来接收连接,并获得客户机的地址信息;客户在建立套接口后就可调用connect( ) 和服务器建立连接; 连接一旦建立,客户机和服务器之间就可以通过调用:send( )和recv( ) (或read( )和write( )来发送和接收数据; 最后,待数据传送结束后,双方调用closesocket() 关闭套接口。4.UDP通信程序源代码Client端:#include stdafx.h#include #include #include /在同一主机的不同端口上分别运行服务器程序和客户端程序WORD RPort = 6666; /远程端口RemotePortchar RIP16=127.0.0.1; /远程IP地址RemoteIPAddrWORD LPort = 7777; /本地端口LocalPortchar LIP16=127.0.0.1; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETstruct sockaddr_in rAddr; /远程参数,remoteAddrstruct sockaddr_in lAddr; /本地参数,localAddrWSADATA WD; /Winsock DLL信息int r; /result;/-void ShowInfo(char *info)puts(info);exit(1);/-void SetsockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP协议A-sin_port = htons(Port); /端口A-sin_addr.s_addr =inet_addr(IP); /IP 地址/-void main( )WORD v; /wVersionRequested;/- - - - - - - - Startup Win socket - - - - - - - -v=0x0101; /0x0101 for v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0)ShowInfo(Start_Error);/- - - - - - - - Create Win socket - - - - - - - -S = socket(AF_INET, SOCK_DGRAM, 0);/创建套接字if(S = -1)ShowInfo(socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetsockAddr(&lAddr, LPort, LIP);/初始化变量lAddrr = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1)ShowInfo(bind_Error);SetsockAddr(&rAddr, RPort, RIP);do/- - - - - - - - Send Mess - - - - - - - -puts(Send:);gets(Msg);if(!strcmp(Msg,exit)/break;r = sendto(S,Msg,strlen(Msg), 0,(struct sockaddr far *)&rAddr, l);/通过套接字向接收端发送信息if(r = -1)ShowInfo(Send_Error);/- - - - - - - - Recieve Mess - - - - - - - -puts(Send ok! Waiting Recieve.);/r = recv(S, Msg, 80,0);r = recvfrom(S,Msg,80,0,(struct sockaddr far *)&rAddr, &l);/发送套接口的主机地址信息存放在rAddr中if(r = -1)ShowInfo(Recieve_Error);Msgr=0;puts(Msg);puts(Recieve ok!);while(1);closesocket(S);WSACleanup();return ;Server端:#include stdafx.h#include #include #include /在同一主机的不同端口上分别运行服务器程序和客户端程序WORD RPort = 7777; /远程端口RemotePortchar RIP16=127.0.0.1; /远程IP地址RemoteIPAddrWORD LPort = 6666; /本地端口LocalPortchar LIP16=127.0.0.1; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETstruct sockaddr_in rAddr; /远程参数,remoteAddrstruct sockaddr_in lAddr; /本地参数,localAddrWSADATA WD; /Winsock DLL信息int r; /result;/-void ShowInfo(char *info)puts(info);exit(1);/-void SetsockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP协议A-sin_port = htons(Port); /端口A-sin_addr.s_addr =inet_addr(IP); /IP 地址/-void main( )WORD v; /wVersionRequested;/- - - - - - - - Startup Win socket - - - - - - - -v=0x0101; /0x0101 for v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0)ShowInfo(Start_Error);/- - - - - - - - Create Win socket - - - - - - - -S = socket(AF_INET, SOCK_DGRAM, 0);/创建套接字if(S = -1)ShowInfo(socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetsockAddr(&lAddr, LPort, LIP);/初始化变量lAddrr = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1)ShowInfo(bind_Error);SetsockAddr(&rAddr, RPort, RIP);do/- - - - - - - - Recieve Mess - - - - - - - -/puts(Send ok! Waiting Recieve.);/r = recv(S, Msg, 80,0);r = recvfrom(S,Msg,80,0,(struct sockaddr far *)&lAddr, &l);/发送套接口的主机地址信息存放在rAddr中if(r = -1)ShowInfo(Recieve_Error);Msgr=0;puts(Msg);puts(Recieve ok!);/- - - - - - - - Send Mess - - - - - - - -puts(Send:);gets(Msg);if(!strcmp(Msg,exit)/break;r = sendto(S,Msg,strlen(Msg), 0,(struct sockaddr far *)&lAddr, l);/通过套接字向接收端发送信息if(r = -1)ShowInfo(Send_Error);while(1);closesocket(S);WSACleanup();return ;5.UDP通信程序数据结构的描述(1)SOCKET S:服务器套接字(2)struct sockaddr_in rAddr:远程参数,remoteAddr,存储TCP/IP协议,IP地址及端口号(3)struct sockaddr_in lAddr:本地参数,localAddr,存储TCP/IP协议,IP地址及端口号6.UDP通信程序的核心算法服务器首先启动,通过调用socket( )建立一个套接口,然后bind( )将该套接口和本地地址(IP地址和端口)联系在一起,服务器调用recvfrom ( )等待接收数据。 客户机通过调用socket( )建立一个套接口,然后bind( )将该套接口和本地地址(IP地址和端口)联系在一起,客户机调用sendto( )向服务器发送数据; 服务器的recvfrom ( ) 接收到客户机的数据后,调用sendto( )向客户机发送应答数据; 客户机的recvfrom ( ) 便接收到了服务器的应答数据;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语言模型与深度学习-洞察阐释
- 教育经济政策对地方财政影响-洞察阐释
- 车联网安全与隐私保护-洞察阐释
- 体医融合视角下大学生健身路径研究
- 基于工业数据的汉字输入技术研究-洞察阐释
- 微电网运行控制技术-洞察阐释
- 玉溪农业职业技术学院《生物科学进展》2023-2024学年第二学期期末试卷
- 湖南大学隧道工程课件
- 潞安职业技术学院《英语语法F》2023-2024学年第二学期期末试卷
- 贵州民用航空职业学院《保险从业知识技能》2023-2024学年第二学期期末试卷
- 儿童重症肺炎护理常规
- 装饰装修施工方案
- 骨科手术切口感染的预防与控制
- 影视制作基地装修施工合同
- 2025年广西职业院校技能大赛高职组(中药传统技能赛项)参考试题库及答案
- 电动车售后维修流程与服务质量提升
- 漂发染发知识培训课件
- 2025年山东威海文旅发展集团有限公司招聘笔试参考题库含答案解析
- 《美国西部拓荒运动》课件
- 燃气管道安全事故应急预案
- 口腔护士配台流程
评论
0/150
提交评论