用Socket套接字实现 DAY TIME
协议的服务器和客户端程序
一、设计目的
为了提高同学的自主动手能力,把理论知识运用于实
践中,从实践中更好的领悟所学的知识.
二、题目要求及需求分析
网络I/O程序设计:用Socket套接字实现DAY TIME 协
议的服务器和客户端程序
DAY TIM用艮务器程序daytime_s
服务器程序创建一个TCP或 UDF套接字,监听端口号13号 端口。在 收到客户端程序的连接后,将服务器的本地时间以ASCII码形式发送 到客户端。然后继续等待下一个客户端的连接。
DAY TIME客 户端程序 daytime_c
客户端程序创建一个TCP或 UDP套接字,连接服务器的13号端口。 在接收到服务器发送的日期时间信息后,将其打印到屏幕上,退出。
客户端运行时需要指定服务器的IP地址。所以客户端程序需 要首先读取命令行中的IP地址参数。
客户机/服务器模式
Serverliste n()accqpt() blocks un til server a conneClie ntsock
Server
liste n()
accqpt() blocks un til server a conne
Clie nt
sock
O W VI
ft()
吋equesff^mOCSeict negotiati(cQnnect()
recv()
send()
sen d()
data
close()
close()
三、概要设计
i.i定义类型
定义了五个字符型变量、三个整型和一个结构体变量
1.2用到的主要函数
Socket提供的系统调用或函数
socket()
获得一个socket文件描述符
bind
将指建socket绑泄到某端口
connect
连接到远程某个端口
listen()
侦听等待远程连接
accept^
接受了一个远程连接
send()frecv()
发送或接收数据(TCP)
sendto()Arecvfrom()
发送或接收数据(UDP)
close()
关闭socket描述符
shutdown()
改变socket o;用性
getpeername()
获得连接另外二端的地址信息
gethostnameO
获得本机主机名
gethostby name()
根据主机名得到主机地址信息
inet_addr()
将IP地址字符串转换成网络了节序 的4字节地址
2.1 主函数
void mai n()
{
定义变量
while (1)
{
if (设置“ TCP或者UDP )
if (ssock < 0)
{}}
else
{
if(nvO) {}}
if (strcmp(transport, "tcp") == 0)
{ }
else{ }}
closesocket(msock);
#if defined WIN32
WSACIea nup();
#en dif
}
四、详细设计
程序代码如下:
1.DAY TIME 客户端程序 daytime_c
#i nclude
#in clude
#in clude"c onn ectsock.c"
#in clude "errexit.c"
#pragma comme nt (Iib,"ws2_32")
#defi ne LINELEN128
#defi ne LINELEN
128
void mai n() {
char *a[100];
char *host=a;
struct sockaddr_in sin; /* the from address of a client */
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(transport, "tcp") == 0)
while( (n
daytime协议的服务器和客户端程序 用Socket套接字实现DAYTIME协议的服务器和客户端程序-0414073352.docx-原创力文档...