daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210726002244.doc-原创力文档...

一、设计目的

为了提高同学的自主动手能力,把理论知识运用于实

践中,从实践中更好的领悟所学的知识.

二、题目要求及需求分析

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 *) &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值