一个简单的时间获取服务器程序
2016-04-01 20:28
387 查看
程序执行流程:
1.创建TCP套接字
2.清空
3.填写网际套接字地址结构
我们指定IP地址为
4.服务器的众所周知的端口号被绑定到所创建的套接字
5.把套接字转换成一个监听套接字,这样来自客户的外来连接就可以在该套接字上由内核接受
LISTENQ指定内核允许在这个监听描述符上排队的最大客户连接数
6.接受客户连接
服务器进程在accept调用中被投入睡眠,等待某个客户连接到达并被内核接受
TCP连接采用三次握手来建立连接
握手完毕时accept返回,其返回值是一个已连接描述符的新描述符
该描述符用于与新近连接的那个客户通信
accept为每个连接到本服务器的客户返回一个新描述符
7.返回当前的时间和日期,它实际上是从1970.1.1:00:00以来的秒数
8.输出可直观可读的时间格式
这里输出结果后面添加了\r\n
9.把结果写个客户
10.终止连接
服务器调用close关闭与客户的连接
该调用引发正常的TCP连接终止序列:
每个方向上发送一个FIN,每个FIN又对各自的对端确认
1.创建TCP套接字
listenfd = Socket(AF_INET,SOCK_STREAM,0)
2.清空
sockaddr_in
servaddr结构体
bzero(&servaddr,
sizeof
(servaddr))
3.填写网际套接字地址结构
我们指定IP地址为
INADDR_ANY,这样要是服务器主机有多个网络接口,服务器进程就可以在任意网络接口上接受客户连接
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
/* daytime server */
4.服务器的众所周知的端口号被绑定到所创建的套接字
5.把套接字转换成一个监听套接字,这样来自客户的外来连接就可以在该套接字上由内核接受
Listen(listenfd,LISTENQ)
LISTENQ指定内核允许在这个监听描述符上排队的最大客户连接数
6.接受客户连接
connfd = Accept(listenfd,(SA *) NULL,NULL)
服务器进程在accept调用中被投入睡眠,等待某个客户连接到达并被内核接受
TCP连接采用三次握手来建立连接
握手完毕时accept返回,其返回值是一个已连接描述符的新描述符
该描述符用于与新近连接的那个客户通信
accept为每个连接到本服务器的客户返回一个新描述符
7.返回当前的时间和日期,它实际上是从1970.1.1:00:00以来的秒数
ticks =
time
(NULL)
8.输出可直观可读的时间格式
这里输出结果后面添加了\r\n
snprintf(buff,
sizeof
(buff),
"%.24s\r\n"
,
ctime
(&ticks))
9.把结果写个客户
Write(connfd,buff,
strlen
(buff))
10.终止连接
Close(connfd)
服务器调用close关闭与客户的连接
该调用引发正常的TCP连接终止序列:
每个方向上发送一个FIN,每个FIN又对各自的对端确认
#include "unp.h"
#include <time.h>
int
main(int argc,char **argv)
{
int listenfd,connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
listenfd = Socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13); /* daytime server */
Bind(listenfd,(SA *) &servaddr,sizeof(servaddr));
Listen(listenfd,LISTENQ);
for ( ; ; ) {
connfd = Accept(listenfd,(SA *) NULL,NULL);
ticks =time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
Write(connfd,buff,strlen(buff));
Close(connfd);
}
}
相关文章推荐
- java之文件
- FatMouse' Trade
- 搜索二维矩阵
- 【BZOJ1458】士兵占领【最大流】
- 深度学习难在哪里?
- 2016-4-01华为校招实习机试
- ListView,GridView,单选默认选中,单选和多选盖布效果
- WEB服务器2--IIS架构(转)
- 关于XShell远程登录显示乱码问题的解决方案
- 网络:网络基础知识
- Use libvirt to conmunicate with qemu
- cocos2dx 3.3 + lua 学习笔记(04)--- 动作回调、函数回调、骨骼动画回调
- C++上机练习
- 113.失恋28天-缝补礼物(多重背包)
- C#-get/set和方法重载
- 专题一 Problem C
- libcurl上传文件到服务器的几种方式
- 10.ARM汇编指令集详解
- 0-1整数规划与隐枚举法-感受剪枝的魅力
- iOS 最新版 CocoaPods 的安装流程