一.tcp通信服务器获取当前时间并发送到客户端。

服务器中必定有bind,listen,accept,三个函数。
1.在创建套接字时可紧接判断。
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror(“socket error:”);
}
2.绑定时当判断是否绑定成功。
*int bind(int socket, const struct sockaddr address, socklen_t address_len);
参数解读
(1)套接字
(2)套接字结构体地址
(3)为地址长度。
struct sockaddr_in xxx;
socklen_t xx_len=sizeof(xxx);
3. 监听(listen)解读
int listen(int socket, int backlog);
功能是设置客户端的连接数目。
参数:int backlog是连接数目的大小,
4.同意接受(accpet)客户端请求 。
int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len);
其返回值通过close(xx);来结束通信。

5.连接(connect)服务器。
int connect(int socket, const struct sockaddr *address,socklen_t address_len);

服务器

#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <strings.h>
#include <time.h>
#include <string.h>int main(int argc, char const *argv[])
{int sockfd,confd;char buf[4097];//文本的最长字节time_t tick;//时间变量struct sockaddr_in servaddr;//套接子结构体if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){perror("socket error:");}bzero(&servaddr,sizeof(servaddr));//servaddr.sin_family=AF_INET;servaddr.sin_port=htons(1221);servaddr.sin_addr.s_addr=htonl(INADDR_ANY);struct sockaddr_in csw;//设置bind 第三个参数socklen_t serlen=sizeof(csw);bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));//绑定 本人没加错误判断listen(sockfd,1024);//监听数目while(1){confd=accept(sockfd,(struct sockaddr *)&csw,&serlen);//接收for(int i=0;i<60;i++)//一分钟的时间{printf("connect ip:%s,port: %d--\n",inet_ntop(AF_INET,&csw.sin_addr,buf,sizeof(buf)),ntohs(csw.sin_port));tick=time(NULL);//时间snprintf(buf,sizeof(buf),"当前时间:%.24s\r\n",ctime(&tick));//存储write(confd,buf,strlen(buf));//写入sleep(1);}close(confd);}return 0;
}

客户端

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <strings.h>int main(int argc, char const *argv[])
{int sockfd,n;char recvline[4097];//文本的最长字节if(argc!=2)//传参{    printf("please use :a.out <ip_addr>");exit(-1);}if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)//创建套接子并判断{perror("socket error:");}struct sockaddr_in servaddr;//创建套接子结构体bzero(&servaddr,sizeof(servaddr));//初始化servaddr.sin_family=AF_INET;servaddr.sin_port=htons(1223);if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)//传入对应客户端ip地址{perror("argv[1] bind error:");}if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)//连接服务{perror("connect error:");}while((n=read(sockfd,recvline,4096))>0)//读取服务器的数据{recvline[n]=0;if(fputs(recvline,stdout)==EOF)//输出显示perror("fputs error:");}if(n<0)perror("read error:");exit(0);return 0;
}

效果:
客户端会接收来自服务器发送的1分钟的时间。
此处客户端输入的ip地址为服务器的ip地址(等同于网址)。


tcp通信服务器获取当前时间并发送到客户端相关推荐

  1. ubuntu怎么测tcp协议的服务器,Ubuntu利用TCP协议来获取server时间(示例代码)

    Linux利用TCP协议来获取server时间 这里使用Unix网络编程里面的一个小程序,该client建立一个到server的TCP连接,然后读取由server以直观可读格式简单地送回的当前时间和日 ...

  2. 搞了半天,终于弄懂了TCP Socket数据的接收和发送,太难~

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 本文将从上层介绍Linux上的TCP/IP栈是如何工作的,特别是s ...

  3. stm32 + ESP8266 wifi获取网络时间和天气 stm32天气预报

    大家遇到什么什么题,可以私聊我. 近期由于某些原因,玩了一下stm32+WiFi获取网络天气和网络时间.之前一直觉得这个东西会有点难度,其实,做完了才发现,其实那只是想象中的难而已.现在,将这几天的成 ...

  4. 51单片机利用8266获取网络时间

    51单片机利用8266获取网络时间 我现在是成都一所不出名的二本院校大三学生,第一次来到CSDN,趁有时间,把我之前做的项目,其中一个模块拿出来和大家分享,我也是小白,希望提出宝贵意见.OK,废话不多 ...

  5. 【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间

    目录 第一部分.写在前面 1.硬件准备 2.相关的AT指令 3.参考博客 第二部分.电脑串口助手调试ESP8266模块获取网络时间 1.ESP8266获取时间的流程 2.具体实现步骤 第三部分.STM ...

  6. 利用苏宁API接口获取北京时间授时

    本文将以苏宁免费的时间接口为例: http://quan.suning.com/getSysTime.do 演示如何向服务器的API接口发送GET请求报文,而且解析数据. GET请求格式 具体GET请 ...

  7. GSM/GPRS模块通过NTP服务器(世界授时服务器)来获取UTC时间,并时间存于RTC中。

    以SIM900A 的GSM/GPRS模块为例.从模块的AT指令手册可以看到有获取UTC(世界时间)的指令:AT+CLTS.当用该指令去获取时间时,从调试助手看到模块只返回OK,之后再无响应.后来在网上 ...

  8. ESP8266+STM32获取网络时间、OLED显示时间图片视频。

    学习过程不易,发文共享以下学习过程~ 先说说我的设计内容的组成: 目录 学习过程不易,发文共享以下学习过程~ 1. STM32控制ESP8266获取网络时间 第一步:电脑控制ESP8266获取时间数据 ...

  9. c语言自动生成系统时间函数,使用C语言中的time函数获取系统时间

    使用C语言中的time函数获取系统时间 可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为: time ...

最新文章

  1. 操作系统导论部分章节习题
  2. Shift+F5后,vc6不可以退出调试状态,程序不能再次执行
  3. 修改Visual Studio Code的自定义键盘快捷键
  4. sublime配置python环境变量_Sublime Python环境配置
  5. 写给大数据从业者:数据科学的5个陷阱与缺陷
  6. Ngnix安装的几种常用方式
  7. mqa插件_为什么专有的MQA音乐编码系统比DRM更好,但仍然不好
  8. python21天打卡Day5--list操作
  9. Android_撕衣服小案例
  10. 《数据结构与抽象:Java语言描述(原书第4版)》一第2章
  11. Qt编程入门(1) : 信号和槽
  12. 大篆汉字对照表_篆书的写法(附篆楷常用字对照表)
  13. Maven下载安装配置详细过程
  14. 洛谷1156 垃圾陷阱
  15. 获取Minecraft服务器信息API,Minecraft快速实现Yggdrasil API正版验证
  16. 第5节 服务器系统简介及用户和组管理
  17. 数据库编程需要下载什么软件
  18. 《致橡树》-- 舒婷
  19. Ubuntu系统新建用户时终端只显示$符号
  20. Django知识补充

热门文章

  1. 【Kettle】kettle运行spoon.bat报错 找不到 javaw.exe
  2. 老毛桃WINPE U盘系统安装详解(转)
  3. Aggregated Residual Transformations for Deep Neural Networks
  4. 几款流行开源ESB总线简介
  5. Python案例1—人民币与美元的汇率兑换V_7.0
  6. 【考研】(转载)考研数学高数公式知识点整理
  7. c语言编写简易打飞机游戏
  8. IP电话与普通电话的区别
  9. 用条码标签打印软件批量打印照片
  10. 基于udp协议的p2p服务器,基于UDP协议的P2P视频系统控制机制分析