- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一个小程序,可以从 SNTP 服务器获取时间。遇到程序未绑定(bind)套接字的问题。我阅读了 RFC 2030,我正在按照它的解释做所有事情,使用 UDP,端口 123。还仔细检查了 UDP 不需要连接只需要绑定(bind)。我看不出我的错,调试器没有给我有用的信息。
这是我的代码:
#include <stdio.h>
#include <winsock2.h>
#include <winsock.h>
#include <Ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib" )
#define BUFFSIZE 1024
int main()
{
WSADATA wsaData;
int sockfd;
char msg[48];
unsigned long buffer[BUFFSIZE];
int rv;
int counter = 0;
int numbytes;
struct addrinfo hints, *servinfo, *p;
struct sockaddr_storage their_addr;
socklen_t addr_size;
for(counter = 0; counter < 48; counter++)
msg[counter] = 0;
msg[0] = 11; //1 byte = 3 first flags set in binary: 00 001 011
msg[1] = 0;
msg[2] = 6;
msg[3] = 1;
msg[12] = 76;
msg[13] = 79;
msg[14] = 67;
msg[15] = 76;
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM; // Use UDP
if ((rv = getaddrinfo("ntp.belnet.be", "123", &hints, &servinfo)) != 0) {
fprintf(stderr, "Getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and make a socket
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,p->ai_protocol)) == -1) {
perror("Failed to create the socket\n");
continue;
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
closesocket(sockfd);
continue;
}
break;
}
if (p == NULL) {
fprintf(stderr, "Failed to bind socket\n");
return 2;
}
freeaddrinfo(servinfo);
//zenden en vragen naar de tijd
if ((numbytes = sendto(sockfd, msg, strlen(msg), 0,p->ai_addr, p->ai_addrlen)) == -1) {
perror("Couldn't send the message.\n");
exit(1);
}
addr_size = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, (char *)buffer, 12 * sizeof(buffer[0]) , 0,(struct sockaddr *)&their_addr, &addr_size))== -1) {
perror("Failed Receive");
exit(1);
}
closesocket(sockfd); //close the socket
WSACleanup();
return 0;
}
有人可以帮助我吗?我做错了什么?
编辑:已经发现这里的问题是解决方案:
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM; // Use UDP
if ((rv = getaddrinfo("ntp.belnet.be", "123", &hints, &servinfo)) != 0) {
fprintf(stderr, "Getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop door al de resultaten en maak de socket
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,p->ai_protocol)) == -1) {
perror("Failed to create the socket\n");
continue;
}
break;
}
//zenden en vragen naar de tijd
if ((numbytes = sendto(sockfd, msg, 48, 0,p->ai_addr, p->ai_addrlen)) == -1) {
perror("Couldn't send the message.\n");
exit(1);
}
addr_size = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, (char *)buffer, 48 , 0,(struct sockaddr *)&their_addr, &addr_size))== -1) {
perror("Failed Receive");
exit(1);
}
最佳答案
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM; // Use UDP
if ((rv = getaddrinfo("ntp.belnet.be", "123", &hints, &servinfo)) != 0) {
fprintf(stderr, "Getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop door al de resultaten en maak de socket
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype,p->ai_protocol)) == -1) {
perror("Failed to create the socket\n");
continue;
}
break;
}
//zenden en vragen naar de tijd
if ((numbytes = sendto(sockfd, msg, 48, 0,p->ai_addr, p->ai_addrlen)) == -1) {
perror("Couldn't send the message.\n");
exit(1);
}
addr_size = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, (char *)buffer, 48 , 0,(struct sockaddr *)&their_addr, &addr_size))== -1) {
perror("Failed Receive");
exit(1);
}
关于C 时间程序 (NTP) 不绑定(bind)套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844732/
我可以使用 ntpq 查询本地 NTP 守护程序以获取系统变量。例如: $ ntpq -c rv associd=0 status=0615 leap_none, sync_ntp,
SNTP 是对完整 NTP 规范的简化。 我想对集成在 Windows XP 中的内部 SNTP 服务器使用完整的 NTP 客户端。这会起作用还是 NTP 客户端需要一个完整的 NTP 服务器才能工作
在 NTP rfc 中定义 “NTP 算法的目标是最小化 UTC 和系统时钟之间的时间差和频率差。” 我能理解“时差”,但 NTP 尝试同步的“频差”是什么? 最佳答案 频率差异是您的时钟与 NTP
我有一 block 带有 I/O 引脚的主板,并且我编写了一个 C 库,其中包含设置和查询这些 I/O 引脚状态的函数。假设这些函数之一的名称是 get_pin(int pin_no) ,并返回该引脚
通过运行命令使用 ntp 同步时出现错误sudo ntpd -gq . 28 Sep 05:19:30 ntpd[1919]: receive: KoD packet from 172.19.79.1
我尝试阅读 NTPv4 RFC 4905。我似乎无法理解它计算下一个轮询间隔以向其对等方发送 NTP 请求数据包的依据是什么。 ppoll 和 hpoll 在查找轮询时间中的作用是什么?另外,MINP
我正在阅读 NTPv4 rfc 以更好地理解 ntp 使用的机制。所以,到目前为止,基本的想法似乎很简单。但我对如何 NTP Clock Discipline works 有点困惑. 在 NTPv4
我试图弄清楚我需要在 NTP 请求包中发送(客户端)什么以从服务器检索 NTP 包。我正在使用 Cortex M3 上的 LWIP,Stellaris LM3S6965 我知道我将收到一个 UDP h
NTP 如何计算往返延迟时间和偏移量。 最佳答案 要将其时钟与远程服务器同步,NTP 客户端必须计算往返延迟时间和偏移量。往返延迟计算为 delta = (t_3 - t_0) - (t_2- t_1
我想知道 NTP 是否可用于测量分布式计算环境中发布者和订阅者之间的延迟。所有节点上都配置了 NTP。我能够单独收集统计数据。如何使用 NTP 准确测量发布者和服务端之间的延迟 最佳答案 您可以使用
我写了一个非常小的ntp客户端,但是发送数据包后我没有收到服务器的响应,我已经用tcpdump确认了这一点。 我定义了一个结构体,用于传输ntp数据包。 struct NtpMessage_t {
我正在尝试转换 RFC 5905 NTP Short Format到秒。 NTP 短格式是 uint32_t,前 16 位是秒(即秒 = format >> 16),其他 16 位是秒的小数部分(即小
我有一个服务器/客户端应用程序,我需要将客户端的时间与服务器的时间同步。因此,我需要在服务器应用程序上实现一个 NTP 服务器(或类似的),并在客户端实现一个 NTP 客户端。 NTP 不是必需的,但
我需要实现自己的 NTP 服务器,或者只选择一个现有的服务器并将其集成到一个应用程序中。我试图在 C++ 中找到可用的 NTP 服务器源代码,但我没有成功。谁能帮帮我? 最诚挚的问候, 最佳答案 我不
我正在使用 iOS-ntp framework而且我有一种我无法理解的奇怪行为。目前是 13:14,但我在进行对开通话时将设备上的时间更改为 13:34: NSDate *deviceDate = [
问题摘要 打开 NTP - 版本 4.2.6p3 - 时钟未同步到低层服务器。 问题描述 我正在 Ubuntu 系统中运行 NTP 单播客户端。 我有 3 台服务器,Server1-Stratum=1
在本地网络中,我有一个本地 NTP 服务器,它使用层 2 来同步其时间。 本地网络内有很多客户端只能看到本地 NTP 服务器。客户端持续同步到本地 NTP 服务器。 由于一些具体情况,我希望避免本地
我正在尝试在无法访问互联网的本地网络中配置 NTP 服务器(即使错误,我也需要所有计算机具有相同的时间)。 我已经为客户端和服务器配置了/etc/ntp.conf 文件。在系统启动时,我运行 ntpd
我使用 NTP 协议(protocol)已有一段时间了。最近,我遇到了一个奇怪的问题。即,当我尝试打印服务器已知的对等点列表时,大约需要 20 秒。早些时候它花费的时间更少。 [root@centos
我使用的是 ARM 嵌入式设备,但我认为这是一个常见的 Linux 问题。 我正在使用带有"file"选项的 Linux 看门狗守护程序来定期检查我的应用程序每 xx 秒左右更改一次的时间。这工作正常
我是一名优秀的程序员,十分优秀!