搭建一个简易的时间服务器笔记----C++学习之路

  步骤:

1.创建TCP套接字

int listenfd;
listenfd = Socket(AF_INET,SOCK_STREAM,0);

关于socket的函数介绍:点击打开链接

第一个参数是协议族,具体在上面的链接有介绍,这里是一个ipv4的协议族。

第二个参数是协议类型,这里是一个tcp协议。

第三个参数是用于制定某个协议的特定类型,通常某个协议只有一种特定类型,这样这个参数只能设置为0,但是有些协议有多种,就需要设定这个参数。2

2.填写一个网际套接字地址结构

struct sockaddr_in servaddr;

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(13);

关于套接字地址结构:点击打开链接

先清零,然后设置套接字数据结构,关于htonl与htons的知识:点击打开链接

时间获取服务器端口为13.

以及指定IP地址为INADDR_ANY,可以在任意网络上接收客户链接。

3.绑定套接字结构。

Bind(listenfd,(SA*) &servaddr,sizeof(servaddr));
关于绑定函数的介绍: 点击打开链接
4.通过listen函数把该套接字转换成一个监听套接字
Listen(listenfd,LISTENQ);

listen函数:点击打开链接

5.进行无限循环来监听。

for( ; ;)
{
    connfd=Accept(listenfd,(SA*)NULL,NULL);
   
    ticks=tima(NULL);
    snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
    Write(connfd,buff,strlen(buff));
     Close(connfd);
}
服务器进程在accept调用中被投入睡眠,等待三次握手来建立连接,握手完毕返回,accept返回一个已连接描述符,为connfd
用于与客户端通信。
6.代码取自《UNIX网络编程第一卷》其中的一些小点:头文件是书作者自己编写的一个unp.h,里面有将大部分的函数再包装一遍
例如其中的Socket:

int
Socket(int family,int type,int protocol)
{
     int n;
    if((n=socket(family,type,protocol))<0)
         err_sys("socket error");
    return n;
}
以及其中的err_sys也是作者自己写的return error的一个头文件。
7.整体代码:


#include "unp.h"
#include <time.h>
#include "myere.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);
	
	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);
	}

}
8.验证:






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值