Socket入门-获取服务器时间实例

daytimetcpsrv.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>

int main(int argc,char **argv)
{
    int listenfd,connfd;//监听套接字,连接套接字
    struct sockaddr_in servaddr;
    char buff[1024];
    time_t ticks;

    //创建监听套接字
    listenfd=socket(AF_INET,SOCK_STREAM,0);

    // 填写网际套接字地址
        //bzero相对于memset 更加好记,只有两个参数。 Berkeley函数和ANSI C标准函数
    bzero(&servaddr,sizeof(servaddr));//清空结构推荐使用memset函数,bzero函数已过时,速度慢
    servaddr.sin_family=AF_INET;//协议
        //htonl htons 字节排序函数
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//任意主机网络接口中连接服务器
    servaddr.sin_port=htons(10000);//绑定端口

    //绑定套接字
    bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));

    //Listen 函数把该套接字转换成监听套接字
    listen(listenfd,10);

    //等待连接
    printf("Waiting connection!\n");

    for(;;)
    {
        //阻塞,投入睡眠,等待某个客户连接的到达并被内核接受。TCP使用三次握手建立连接,握手完毕时accept返回,只时一个已连接描述符
        connfd=accept(listenfd,(struct sockaddr *)NULL,NULL);
        ticks=time(NULL);
        snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));//ctime把整数值转换成直观可读的时间格式
        //写到buff缓冲区,并不等于已经发送给对方,等缓冲区处理完之前的数据后,开始传送缓冲区内容
        write(connfd,buff,strlen(buff));
        close(connfd);
    }
}
//补充知识:
//------------------------
//字节操纵函数  <strings.h>
//Berkeley函数
//bzero bcopy bcmp ---以上仅仅列出函数名
//ANSI C 函数
//*memset *memcpy memcmp
//------------------------

  daytimetcpcli.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc,char **argv)
{
    int sockfd,n;
    char recvline[1024];
    struct sockaddr_in servaddr;

    if(argc!=2)
        {printf("参数有误!\n");return -1;}

    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
        {printf("套接字创建失败!\n");return -1;}

    //指定服务器的IP地址和端口
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family=AF_INET;//协议
    servaddr.sin_port =htons(10000);//端口
        //inet_pton地址转换(ASCII 字符串 与 网络字节序的二进制之间转换网际地址) P表达->N数值
    if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)//IP地址有参数获得argv[1],argv[0]->当前程序
        {printf("inet_pton error for ");return -1;}

    //进行连接到服务器
    if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
        {printf("connect error");return -1;}

    //读数据
    while( (n=read(sockfd,recvline,1024))>0){
        recvline[n]=0;
        if(fputs(recvline,stdout)==EOF)//将recvline中的数据输出到标准输出
            {printf("fputs error");return -1;}
    }

    if(n<0)printf("read error");

    exit(0);
}

  
输出结果:
服务器端:
[email protected]:~/Public/C$ ./daytimetcpsrv.out 
Waiting connection!

客户机端:
[email protected]:~/Public/C$ ./daytimetcpcli.out 127.0.0.1
Sat Jun  4 09:28:33 2016

时间: 2025-01-11 17:19:28

Socket入门-获取服务器时间实例的相关文章

Unity 获取服务器时间 HTTP请求方式

在写每日签到的时候,我居然使用的是本地时间...被项目经理笑哭了...., 如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法. 方法总结: 1. 使用HTTP请求获取服务器时间,不能实时获取服务器时间这样高频率的 2. 使用socket可以实时获取服务器时间 3. 使用C#自带API获取sql server 标准北京时间(=.=还没有找到这个API) 第HTTP方式: 代码: using UnityEngine; using System.Collections; u

Ubuntu利用TCP协议来获取服务器时间

Linux利用TCP协议来获取服务器时间 这里使用Unix网络编程里面的一个小程序,该客户端建立一个到服务器的TCP连接,然后读取由服务器以直观可读格式简单地送回的当前时间和日期. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("u

通过AFNetworking获取服务器时间

在一些场合,我们需要获取服务器的时间,计算该时间与客户端本地时间的差值,以利于时间同步.有人说,这个不是很简单吗,让后台的TX给你一个获取服务器时间的接口就行了. 其实这个还是比较麻烦的,更简单的是利用HTTP Header来获取服务器时间--每个HTTP header的Date参数就是这个时间.在iOS中我们通常用AFNetworking发请求,那么用AFNetworking怎么得到HTTP header信息呢? 很简单,用 [[operation response] allHeaderFie

jsp页面获取服务器时间

Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day= c.get(Calendar.DAY);   这三行加在<%   %>里面 调用时用<%= year  %><%= month%><%= day%> jsp页面获取服务器时间

动态获取服务器时间

最近在做的这个项目要获取到后台的数据,然后使用html5绘制曲线,以前都是在自己电脑上使用没有发现有什么不正常的地方,昨天连接同事的服务器发现有段数据怎么都对不上了,开始我还以为程序有问题呢,找了半天结构发现是我的电脑时间和同事的电脑时间对不上导致的.既然发现了问题下面就是找出解决办法了. 实际上最好的解决办法是固定客户端的时间,不然修改,但你会发现这个不可能的.所以只有找其他方式的.再有就是获取服务器时间然后同步到客户端了.实际上这个游戏三种方式可行. 1.既然是动态获取就每秒获取一次,这样能

小案例 - 获取服务器时间

1. GetTime.html 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <scri

09 获取服务器时间

获取服务器时间:var now = new Date($.ajax({async: false}).getResponseHeader("Date")); 2.new Date()用法:获取年:var currentYear = now.getFullYear();获取月:var currentMonth = now.getMonth();获取日:var currentDay = now.getDate();获取小时:var currentHours = now.getHours();

Javascript获取服务器时间

Javascript是运行在客户端的脚本,我们一般都用new Date()来获取当前时间,但是得到的是客户端的时间,客户端时间是随意更改的,如果要做一个产品发布倒计时的话,客户端时间一改,就要闹笑话了.业务中需要用到服务器时间的场景还有很多,那么仅仅通过js怎么拿到服务器时间呢?事实上,只需要一个ajax请求就搞定,通过读取XMLHttpRequest对象的请求头里面的时间戳得到当前服务器时间! 原理就是这么简单:通过ajax向服务器发送请求,当服务器收到请求后即可读取请求头的时间戳了,不管请求

获取服务器时间ajax

$.ajax({ type:"OPTIONS", url:"/", complete:function(x){ // alert(x.getResponseHeader("Date")) var time = x.getResponseHeader("Date"); var curDate = new Date(time); var year = curDate.getFullYear(); var month = curDa