ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:281.65KB ,
资源ID:9181360      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9181360.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于UDP的服务器程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于UDP的服务器程序.docx

1、基于UDP的服务器程序摘 要1 课程设计目的网络服务是以客户机/服务器模式工作的,服务器在特定的端口上提供网络服务。本课程设计的主要目的的是通过编写基于UDP的服务器程序,了解客户机/服务器与UDP协议的工作原理。2 课程设计要求根据后面介绍的UDP协议的工作原理,编写程序实现基于UDP的服务器。1) 以命令行形式运行:UdpServer serve_port其中,UdpServer为程序名,server_port为服务器使用的端口号。2) 输出内容:服务器与客户端的交互过程,例如:UDP Server Recceive:。UDP Server Send:。3 相关知识UDP协议是一种无连接的

2、 不可靠的传输层协议。从应用层的角度来看,UDP协议在网络层的IP协议的基础上,向应用层的程序提供不可靠的数据包传输服务。UDP协议为上面的应用层提供传输服务。UDP协议主要用于对传输效率要求很高的应用层协议,例如引导协议(BOOTP) 网络时间协议(NTP) 简单网络管理协议(SNMP) 简单的文件传输协议(TFTP)等。另外,域名服务器(DNS) 同时依赖于TCP与UDP协议。由于UDP协议采用无连接的工作方式,并且只提供有限的差错控制,因此UDP协议简单并且执行效率很高。UDP协议没有采用基于窗口的流量控制机制,当数据包过多时在接收端可能会出现溢出,接收端无法判断在传输中出现那种错误,应

3、用层还需要提供一定的差错控制功能。目前,一些实用要求一恒定速率发送数据,并且在网络出现拥塞时可以丢失一些数据,但是不希望数据传输的时延太大,UDP协议正好可以适应这种需求。基于UDP协议的网络应用也采用客户机/服务器模式。在这里,客户机与服务器表示互相通信的两个应用程序的进程,它们分别被称为UDP客户机与UDP服务器。UDP服务器是指提供某种网络服务的应用进程,它通过熟知端口号来向客户提供服务。3.2 TCP/IP协议技术在T C P / I P协议族中,有两个互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性的数据通信。它所做的工

4、作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。3.3 TCP/IP协议与Winsock网络编程接口Winsock规范不是一种网络协议,而是一套开放的、支持多种协议的Windows写的网络编程接口。Winsock可以访问很多种网络协议,可以把它当作一种协议的封装。现在的Winsock已

5、经基本上实现了与协议无关,可以使用Winsock来调用协议的功能3.4WINSOCK API的应用主要涉及到的函数:(1)WSAStartup函数,基本格式为intWSAtartup(WORD wVersionRequestted,LPWSADATAlpWSAData);(2)WSACleanup函数,其基本格式为intWSACleanup (void);(3)socket函数,其格式为 socket(intaf,inttype,int protocol);用于创建一个能够进行网络通信的套接字。(4)closesocket函数格式为:intclosesocket(SOCKET s);用来关闭一

6、个描述符为s的套接字。(5)send 函数格式为:int send(SOCKET s,const char FAR *buf,intlen ,int flags);向TCP连接的另一端发送数据。(6)recv函数格式为:intrecv(SOCKET s, char FAR *buf,intlen, int flags);用来从TCP的另一端接收数据。(7)bind函数格式为:int bind(SOCKET s, conststructsockaddr FAR *name,intnamelen);用来给SOCKET 绑定一个IP地址和端口号。(8)listen函数格式为:int listen (

7、SOCKET s,int backlog);使流套接字S处于监听状态。(9)accept函数格式为:SOCKET accept (SOCKET s, structsockaddr FAR *addr,int FAR *addrlen);该函数从监听状态的的流套接字S的客户连接请求队列取出排在最前面的客户请求,并且创建一个新的套接字来与客户套接字创建连接通道。(10)connect函数格式为:int connect(SOCKET s,conststructsockaddr FAR *name,intnamelen);使用该函数使客户Socke与监听与计算机特定端口上的服务Socket进行连接,这

8、台计算机由name指定。4 课程设计分析首先编写两个程序分别为客户器与服务器,使得两者建立连接,在客户器中发送命令然后等待服务器提供相应的反映,具体实现如下:对于UDP服务器端,服务程序首先调用套接口函数socket(),然后调用绑定IP地址和协议端口 号函数bind()。之后调用函数recvfrom()接收客户数据,调用sendto()向客户发送数据。 对于UDP客户端,客户机 程序启动后调用套接口函数socket(),然后调用sendto()向服务器发送数据,调用recvfrom()接收服务器数据。 双 方数据交换成功后,各自调用关闭套接口函数close()关闭套接口。UDP套接口通信方式

9、。具体流程图如下: 流程图二:程序二:客户机端程序#include#include#include#define DEFAULT_PORT 5050#define DATA_BUFFER 1024#pragma comment(lib,WS2_32.lib)void main(int argc,char* argv) WSADATA wsaData; SOCKET sClient; int iPort=5050; int iLen; int isend,iRecv; char send_buf=Hello! I am a client; char recv_bufDATA_BUFFER; st

10、ruct sockaddr_in ser; if(argc2) 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()函数调用失败:%dn,WSAGetLastError(); return; ser

11、.sin_family=AF_INET; ser.sin_port=htons(iPort); ser.sin_addr.s_addr=inet_addr(argv1); iLen=sizeof(ser); isend=sen5.程序代码5 #include 6 #include 7 #pragma comment(lib, WS2_32) / 链接到?WS2_32.lib 8 BOOL InitWinsock();9 void main()10 11 SOCKET socket1;12 13 InitWinsock();14 struct sockaddr_in server;15 int

12、len =sizeof(server);16 server.sin_family=AF_INET;17 server.sin_port=htons(1000); /server的?监听y端?口18 server.sin_addr.s_addr=inet_addr(127.1.1.1); /server的?地?址 19 20 socket1=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);21 while (1)22 char buffer1024=0;23 24 25 printf(UDP Needer please input messagen);26 scan

13、f(%s,buffer);27 if (strcmp(buffer,bye)=0)28 break;29 if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)30 printf(UDP Needer Send: %sn,buffer);31 if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len)!=SOCKET_ERROR)32 printf(Receive from UDP:%

14、sn,buffer);33 34 35 closesocket(socket1);36 37 38 BOOL InitWinsock()39 40 int Error;41 WORD VersionRequested;42 WSADATA WsaData;43 VersionRequested=MAKEWORD(2,2);44 Error=WSAStartup(VersionRequested,&WsaData); /启?动WinSock245 if(Error!=0)46 47 return FALSE;48 49 else50 51 if(LOBYTE(WsaData.wVersion)!

15、=2|HIBYTE(WsaData.wHighVersion)!=2)52 53 WSACleanup();54 return FALSE;55 56 57 58 return TRUE;59 60 61 #include 62 #include63 #include 64 #pragma comment(lib, WS2_32) / 链接到?WS2_32.lib 65 BOOL InitWinsock();66 void main()67 68 SOCKET socket1;69 70 InitWinsock();71 struct sockaddr_in local;72 struct s

16、ockaddr_in from;73 int fromlen =sizeof(from);74 local.sin_family=AF_INET;75 local.sin_port=htons(1000); /监听y端?口76 local.sin_addr.s_addr=INADDR_ANY; /本?机77 78 socket1=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);79 80 bind(socket1,(struct sockaddr*)&local,sizeof local);81 82 while (1)83 84 char buffer1024=

17、0;85 printf(UDP Server waiting for message from others-nn);86 if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)87 88 printf(UDP Server Receive: %sn,buffer);89 /给?cilent发信?息90 if(strcmp(buffer,gettime)=0)91 92 /获?得?当前系统3时间?93 time_t CurTime;94 time(&CurTime)

18、;95 strftime(buffer,sizeof(buffer),%Y-%m-%d %H:%M:%S,localtime(&CurTime);96 sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);97 printf(UDP Server send: %sn,buffer);98 sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);99 100 Sleep(500);101 102 103 closesocke

19、t(socket1);104 105 106 107 108 BOOL InitWinsock()109 110 int Error;111 WORD VersionRequested;112 WSADATA WsaData;113 VersionRequested=MAKEWORD(2,2);114 Error=WSAStartup(VersionRequested,&WsaData); /启?动WinSock2115 if(Error!=0)116 117 return FALSE;118 119 else120 121 if(LOBYTE(WsaData.wVersion)!=2|HIB

20、YTE(WsaData.wHighVersion)!=2)122 123 WSACleanup();124 return FALSE;125 126 127 128 return TRUE;129 运行结果与分析(运行结果是否正确,课程设计过程中出现的问题及其解决方案,可扩充的功能及设计等。)客户器在此页面可以输出命令,来等待服务器作出反应。客户器输出命令语句等待服务器反应。此图为客户器输出计算机三班张朝辉的课设组作业的反应界面。7参考文献1谢希仁 编著. 计算机网络 (第5版) .北京:电子工业出版社,20082吴宜功 吴英 编著. 计算机网络课程设计 (第2版). 北京: 机械工业出版社,2012

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

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