UDP时间更新服务程序

2023-12-26 09:48
文章标签 更新 时间 udp 服务程序

本文主要是介绍UDP时间更新服务程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UDP时间更新服务程序


 http://qzher.com/?p=647


网络编程,最好采用两台电脑,

或者一台电脑,再开个虚拟机,虚拟机采用网络桥接模式

 

 

特点:

发消息方一直向指定IP发送报时消息

收方一上线就能得到发来的即时消息 (未上线的消息全被抛弃)

若收方上线期间发消息方关闭收方也一直等待发消息方的消息,

只要发消息方一上线发送消息,收方可以继续接收发来的消息

 

应用比如视频直播,游戏画面等的传输 

 

 

 


 

源码:

 

 

#include <stdio.h>

#include<iostream>

#include <Winsock2.h>

#include <time.h>

#pragma comment(lib,"ws2_32.lib")

#define  BUF_SIZE 64

 

int main()

{

WSADATA wsadata;

int nRes = 0;

nRes = WSAStartup(MAKEWORD(2, 3), &wsadata);

if (0 != nRes)

{

return 0;

}

 

SOCKET sockSend;

sockSend = socket(AF_INETSOCK_DGRAMIPPROTO_UDP);

if (INVALID_SOCKET == sockSend)

{

WSACleanup();

return 0;

}

 

sockaddr_in addrRecv;

addrRecv.sin_family = AF_INET;

addrRecv.sin_port = htons(9090);

// 向222的IP发送数据

addrRecv.sin_addr.S_un.S_addr = inet_addr("192.168.1.222");

 

// 就算绑定错误也不用管(这里应该也会绑定出错)

nRes = bind(sockSend, (sockaddr*)&addrRecvsizeof(sockaddr_in));

printf("—-时间服务器已启动—–\n ");

 

int nSendLen = 0;

struct tm tLocal;

time_t  t = time(NULL);

char chTime[64];

int nLen = sizeof(sockaddr_in);

 

while (true)

{

// 获取当前时间并格式化

t = time(NULL);

localtime_s(&tLocal, &t);

sprintf_s(chTime"%s"asctime(&tLocal));

 

// 向222发送时间

nSendLen = sendto(sockSendchTimestrlen(chTime), 0, (sockaddr*)&addrRecvnLen);

Sleep(1000);

}

 

closesocket(sockSend);

WSACleanup();

std::cout << "server stoped! " << std::endl;

 

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <stdio.h>

#include<iostream>

#include <Winsock2.h>

#pragma comment(lib,"ws2_32.lib")

#define  BUF_SIZE 64

 

int main()

{

WSADATA wsadata;

int nRes = 0;

nRes = WSAStartup(MAKEWORD(2, 2), &wsadata);

if (0 != nRes)

{

return 0;

}

 

SOCKET sockTimeRecv;

sockTimeRecv = socket(AF_INETSOCK_DGRAMIPPROTO_UDP);

if (INVALID_SOCKET == sockTimeRecv)

{

WSACleanup();

return 0;

}

 

sockaddr_in addrRecv;

addrRecv.sin_family = AF_INET;

addrRecv.sin_port = htons(9090);

addrRecv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

 

nRes = bind(sockTimeRecv, (sockaddr*)&addrRecvsizeof(sockaddr_in));

 

 

char chBufRecv[BUF_SIZE] = { "0" };

int nLen = sizeof(sockaddr_in);

printf("—-qzher.com start to recv data—–\n ");

 

charpChClientAddr = nullptr;

int nRecvLen = 0;

 

while (true)

{

nRecvLen = recvfrom(sockTimeRecvchBufRecvBUF_SIZE, 0,

(sockaddr*)&addrRecv, &nLen);

 

if (strlen(chBufRecv) > 0)

{

pChClientAddr = inet_ntoa(addrRecv.sin_addr);

printf("%s send:———%s\n"pChClientAddrchBufRecv);

}

}

 

closesocket(sockTimeRecv);

WSACleanup();

std::cout << "server stoped! " << std::endl;

 

return 0;

}


源码下载: (VS2015)  http://download.csdn.net/detail/sinat_35523212/9615378

这篇关于UDP时间更新服务程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538961

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价