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

来源:互联网 发布:贷款软件 编辑:程序博客网 时间:2024/06/07 09:09

  步骤:

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:

intSocket(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.验证:






原创粉丝点击