一个简单的时间获取服务器程序

程序执行流程:

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.服务器的众所周知的端口号被绑定到所创建的套接字

Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

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);
	}
}
时间: 2024-10-26 16:24:02

一个简单的时间获取服务器程序的相关文章

UNIX网络编程1.5一个简单的时间获取服务器程序1.6客户服务器程序索引表

#include "../lib/unpsunyj.h" #include <time.h> int main(int argc, char ** argv) { int listenfd; int connfd; sockaddr_in servaddr; char buff[MAXLINE]; time_t ticks; // TCP套接字的创建 // listenfd = Socket(AF_INET, SOCK_STREAM, 0); if ((listenfd =

简介(1)-概述、一个简单的时间获取客户程序

1.概述 大多数网络应用划分:客户(client)和服务器(server) 一些复杂的网络应用:异步回调通信,即服务器向客户发起请求消息. 协议栈:应用协议.TCP协议.IP协议.以太网协议 局域网(local area network,LAN),广域网(wide area network,WAN). 路由器是广域网的架构设备. 因特网:当今最大的广域网. POSIX:一种被多数厂商采纳的标准. 2.一个简单的时间获取客户程序 1)创建套接字 socket函数 2)指定服务器的IP地址和端口 s

一个简单的时间获取客户程序

程序执行流程: 1.创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0) 2.把结构体servaddr清零 bzero(&servaddr, sizeof(servaddr)) 3.置地址簇为AF_INET servaddr.sin_family = AF_INET 4.端口号设为13 网际套接字地址结构中IP地址和端口号这2个成员必须使用特定格式 htons主机到网络短整数,去转换二进制端口号 servaddr.sin_port   = htons(13

Linux网络编程(简单的时间获取服务器)

1.一个简单的服务器时间获取程序 服务器和客户端采用UDP通信的方式,来编写一个简单的时间获取应用. 把过程大致理顺一下,首先是服务器端的编写,使用的是迭代的方式,没有并发 先创建一个socket而后bind服务器,绑定之后就可以创建一个循环来接收和发送 信息了,以达到和客户端之间的通信. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include

作为守护进程运行的协议无关时间获取服务器程序

#include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #define MAXLINE 4096 int daemon_init(const char *, int); int tcp_listen(const char *, const char *

用nodejs搭建一个简单的服务监听程序

作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还是记录一下方便以后复习! 今天主要记录一下,很久以前用nodejs制作一个简单的服务监听程序的一些过程! 大家都知道,通过nodejs可以对前台请求进行监听,这里就放一个官网的hello world例子吧: var http = require('http'); http.createServer(

一个简单的Java web服务器实现

一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用ServerSocket对象的accept方法,等待连接,连接成功会返回一个Socket对象,否则一直阻塞等待: 从Socket对象中获取InputStream和OutputStream字节流,这两个流分别对应request请求和response响应: 处理请求:读取InputStream字节流信息,转成字

L脚本语言开发的时间获取服务器和客户端

#scp #这是一个TCP时间获取服务器的例子 #它不断监听一个网络连接 #如果有网络连接到来 #就通过新建立的网络连接发送当前时间 定义:字符串,string2,"" 定义:地址,addr2,127.0.0.1,13 定义:整数,字节数,0 定义:网络连接,conn2,TCP 定义:函数,routine 开始:函数,routine 监听:conn2,addr2 定义:时间,time1 读取:当前时间,time1 转换:string2,time1 取大小:字符串,string2,字节数

(1)风色从零单排《C++ Primer》 一个简单的c++程序

从零单排<C++ Primer> --(1)一个简单的c++程序 本次学习收获 0.写在前面 风色以前上过C++的课程,然而当时并没有认真去学,基本不能使用c++来作项目开发. 这次又一次学习c++,首先会阅读c++Prime英文版第五版,希望能够为以后的学习打下坚实的基础. 1.程序 一个简单的c++程序(P17),帮助我们高速了解c++的代码风格,并通过分析代码学习c++ 程序意图:在终端上输入一组数字.输出不同数字输出的次数.同样的数字必须是连续的. 如果输入: 42 42 42 42