用Socket套接字实现DAYTIME协议书的服务器与客户端程序文件_第1页
用Socket套接字实现DAYTIME协议书的服务器与客户端程序文件_第2页
用Socket套接字实现DAYTIME协议书的服务器与客户端程序文件_第3页
用Socket套接字实现DAYTIME协议书的服务器与客户端程序文件_第4页
用Socket套接字实现DAYTIME协议书的服务器与客户端程序文件_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./设计目的为了提高同学的自主动手能力,把理论知识运用于实践中,从实践中更好的领悟所学的知识.题目要求及需求分析1.网络I/O程序设计:用Socket套接字实现DAYTIME协议的服务器和客户端程序DAYTIME服务器程序daytime_s服务器程序创建一个TCP或UDP套接字,监听端口号13号端口。在收到客户端程序的连接后,将服务器的本地时间以ASCII码形式发送到客户端。然后继续等待下一个客户端的连接。DAYTIME客户端程序daytime_c客户端程序创建一个TCP或UDP套接字,连接服务器的13号端口。在接收到服务器发送的日期时间信息后,将其打印到屏幕上,退出。客户端运行时需要指定服务器的IP地址。所以客户端程序需要首先读取命令行中的IP地址参数。2.客户机/服务器模式socket<>socket<>bind<>listen<>recv<>close<>socket<>connect<>recv<>send<>close<>blocksuntilserverreceivesaconnectrequestfromclientdatadataServerClientaccept<>send<>connectnegotiation概要设计1.1定义类型定义了五个字符型变量、三个整型和一个结构体变量。1.2用到的主要函数Socket提供的系统调用或函数2.1主函数voidmain<>{ 定义变量while<1> { if<设置"TCP或者UDP"> { if<ssock<0> {}} else { if<n<0>{}} if<strcmp<transport,"tcp">==0> {} else{}} closesocket<msock>;#ifdefinedWIN32WSACleanup<>;#endif}详细设计程序代码如下:DAYTIME客户端程序daytime_c#include<stdio.h>#include<winsock2.h>#include"connectsock.c"#include"errexit.c"#pragmacomment<lib,"ws2_32">#define LINELEN 128voidmain<>{ char*a[100]; char*host=a; struct sockaddr_insin; /*thefromaddressofaclient */ int s; char*service="13"; /*端口号 */ char*transport="tcp";/*"tcp"or"udp"*/ char buf[LINELEN+1]; /*bufferforonelineoftext */ int n; /*socket,读入计数*/ intalen;#ifdefinedWIN32WSADATAwsadata;WSAStartup<1,&wsadata>;#endif printf<"请输入服务器的IP地址:">; scanf<"%s\n",a>;printf<"显示当前时间:\n">; s=connectsock<host,service,transport>; if<s<0> return; if<strcmp<transport,"tcp">==0> { while<<n=recv<s,buf,LINELEN,0>>>0> { buf[n]='\0'; /*ensurenull-terminated,定义buf[LINELEN+1]而不是buf[LINELEN]是为了避免bufferoverflow*/ fputs<buf,stdout>; } } else { sendto<s,"GetTime",8,0,<structsockaddr*>&sin,sizeof<sin>>; alen=sizeof<sin>; n=recvfrom<s,buf,LINELEN,0,<structsockaddr*>&sin,&alen>; buf[n]='\0'; fputs<buf,stdout>; } closesocket<s>;#ifdefinedWIN32WSACleanup<>;#endif}DAYTIME客户端程序daytime_c#include<stdio.h>#include<winsock2.h>#include<time.h>#include"passivesock.c"#include"errexit.c"#pragmacomment<lib,"ws2_32">#defineQLEN 32#defineMAX_MSG100voidmain<>{ char*host="127.0.0.1"; struct sockaddr_incsin; /*客服端地址 */ int msock,ssock; /*master&slavesockets */ intalen; char*service="13"; /*端口*/ char*transport="tcp";/*"tcp"or"udp"*/ time_t now; /*当前时间 */ char *pts; /*pointertotimestring */ charmsg[MAX_MSG]; intn;#ifdefinedWIN32WSADATAwsadata;WSAStartup<2,&wsadata>;#endif msock=passivesock<service,transport,QLEN>; printf<"waitforrequestsforservice:%s\n",service>; while<1> { if<strcmp<transport,"tcp">==0> { alen=sizeof<csin>; ssock=accept<msock,<structsockaddr*>&csin,&alen>; if<ssock<0> { printf<"acceptfailed\n">; break; }} else { alen=sizeof<csin>; n=recvfrom<msock,msg,MAX_MSG,0,<structsockaddr*>&csin,&alen>; if<n<0>{ printf<"acceptfailed">; break; } } time<&now>; pts=ctime<&now>; if<strcmp<transport,"tcp">==0> { send<ssock,pts,strlen<pts>,0>; closesocket<ssock>; } else { alen=sizeof<csin>; sendto<msock,pts,strlen<pts>,0,<structsockaddr*>&csin,alen>; }} closesocket<msock>;#ifdefinedWIN32WSACleanup<>;#endif}调试分析1.1打开服务器端,等待客服端建立连接服务器程序创建一个TCP套接字,监听端口号13号端口。2.1打开客户端准备连接服务器端客户端程序创建一个TCP或UDP套接字,连接服务器的13号端口。客户端运行时需要指定服务器的IP地址。所以客户端程序需要首先读取命令行中的IP地址参数。2.2输入服务器端的在收到客户端程序的连接后,将服务器的本地时间以ASCII码形式发送到客户端。然后继续等待下一个客户端的连接。在接收到服务器发送的日期时间信息后,将其打印到屏幕上,退出。设计总结本次实验在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论