一、设计目的
为了提高同学的自主动手能力,把理论知识运用于实
践中,从实践中更好的领悟所学的知识.
二、题目要求及需求分析
1.网络I/O程序设计:用Socket套接字实现DAYTIME 协
议的服务器和客户端程序
1.DAY TIM宙艮务器程序daytime_s
服务器程序创建一个TCP或UDF套接字,监听端口号13号 端口。在 收到客户端程序的连接后,将服务器的本地时间以ASCII码形式发送 到客户端。然后继续等待下一个客户端的连接。
2.DAY TIME客 户端程序 daytime_c
客户端程序创建一个TCP或 UDP套接字,连接服务器的13号端口。 在接收到服务器发送的日期时间信息后,将其打印到屏幕上,退出。
客户端运行时需要指定服务器的IP地址。所以客户端程序需 要首先读取命令行中的IP地址参数。
2.客户机/服务器模式
Server
三、概要设计
1.1定义类型
定义了五个字符型变量、三个整型和一个结构体变量
1.2用到的主要函数
Socket提供的系统调用或函数
socket()
获得一个socket文件描述符
bind
将指定socket绑定到某端口
connect
连接到远程某个端口
listen()
侦听等待远程连接
accept()
接受了一个远程连接
send(),recvO
发送或接收数据(TCP)
sendto()frecvfrom()
发送或接收数据(UDP)
close()
关闭socket描述符
shutdown()
改变socket可用性
getpeername()
获得连接另外一端的地址信息
gethostname()
获得本机主机名
gethostbyname()
根据主机名得到主机地址信息
inet_addr()
将IP地址字符串转换成网络字节序 的4字节地址
2.1 主函数
void mai n()
{
定义变量
while (1)
{
if (设置“ TCP或者UDP )
if (ssock < 0)
{}}
else
{
if(nvO) {}}
if (strcmp(tra nsport, "tcp") == 0)
{ }
else{ }}
closesocket(msock);
#if defined WIN32
WSACIea nup();
#en dif
}
四、详细设计
程序代码如下:
1.DAY TIME 客户端程序 daytime_c
#in clude
#in clude
#in clude"c onn ectsock.c"
#in clude "errexit.c"
#pragma comme nt (Iib,"ws2_32")
#defi neLINELEN 128
void mai n() {
char *a[100];
char *host=a;
struct sockaddr_in sin; /* the from address of a client7
int s;
char *service = "13"; /* 端口号 */
char *tra nsport = "tcp";/*"tcp" or "udp"*/
char buf[LINELEN+1]; /* buffer for one line of text */
int n;/* socket,读入计数 */
int ale n;
#if defined WIN32
WSADATA wsadata;
WSAStartup(1, &wsadata);
#en dif
printf("请输入服务器的IP地址:”);
sca nf("%s\n",a);
printf("显示当前时间:\n");
s = conn ectsock(host, service, tran sport);
if(s < 0)
return;
if (strcmp(tra nsport, "tcp") == 0)
{
while( (n = recv(s, buf, LINELEN, 0)) > 0)
{
buf[n]二'\0:/*en suren ull-term in ated, 定 义
buf[LINELEN+1]而不是 buf[LINELEN]是为了避免 buffer overflow*/ fputs(buf, stdout);
}
}
else
{
sen dto(s, "Get Time", 8, 0, (struct sockaddr *) &sin, sizeof(s in)); ale n 二 sizeof(s in);
n 二 recvfrom(s, buf, LINELEN, 0, (struct sockaddr *) &
daytime协议的服务器和客户端程序 用Socket套接字实现DAYTIME协议的服务器和客户端程序-0726002244.doc-原创力文档...