想自己写个时间同步小工具,recvfrom没有响应,一直阻塞不返回,是什么有关问题

想自己写个时间同步小工具,recvfrom没有响应,一直阻塞不返回,是什么问题?
我用C参考一段python代码写了个从国家授时中心获取时间的程序,可是在recvfrom的时候总是不返回,从来没成功收到任何的数据。
差不多的代码在python里就没问题(至少成功率在60%以上),这是为什么呢?

希望哪个高手能帮我找找看,看我的C代码出了什么问题^_^。

以下是我自己写的C代码,以及作为参考的python代码:
C代码:

#include <WinSock2.h>
#include <Windows.h>
#include <ws2def.h>
#include <stdio.h>
#include <conio.h>

#pragma comment ( lib , "ws2_32" )


char NationalTimeServer[] = "210.72.145.44"; // 国家授时中心ip
char *TestServer = "127.0.0.1"; // 自己给自己发送却收得到,这又是为什么呢?
//char *Server = TestServer;
char *Server = NationalTimeServer;
int ServerPort = 123;

typedef struct __TimeStamp
{
unsigned long IntPart;
float FloatingPart;
}TimeStamp;
typedef struct __SNTPHeader
{
union __SNTPHeader_octet
{
struct __SNTPHeader_Bits
{
char LeapIndicator : 2;
char VersionNumber : 3;
char Mode : 3;
}Bits;
char octet;
}octet;
char Stratum;
char Poll;
char Precision;
signed int RootDelay;
unsigned int RootDispersion;
unsigned long ReferenceIdentifier;
TimeStamp ReferenceTimeStamp;
TimeStamp OriginateTimeStamp;
TimeStamp ReceiveTimeStamp;
TimeStamp TransmitTimeStamp;
int KeyIdentifier;
__int64 MessageDigest1;
__int64 MessageDigest2;
}SNTPHeader;


int main ( )
{
SOCKET s;
WSADATA WSAdata = { 0 }; 

SNTPHeader SendData = { 0 };
SNTPHeader RecvData = { 0 }; 

SendData.octet.Bits.LeapIndicator = 0;
SendData.octet.Bits.VersionNumber = 4;
SendData.octet.Bits.Mode = 3;
 
WSAStartup ( 0x202 , &WSAdata );

s = socket ( AF_INET , SOCK_DGRAM , IPPROTO_UDP );

{
struct sockaddr_in saddrSend;
saddrSend.sin_addr.S_un.S_addr = inet_addr ( Server );
saddrSend.sin_family = AF_INET;  
saddrSend.sin_port = htons ( ServerPort );

printf ( "sending SNTP header\n" );
sendto ( s , ( char * ) & SendData , sizeof ( SendData ) ,
0 , ( SOCKADDR * ) & saddrSend , sizeof ( saddrSend ) );
printf ( "finish sending SNTP header!\n"
"\n" );
}

{
struct sockaddr_in saddrRecv = { 0 };
int AddrLen = sizeof ( saddrRecv );

printf ( "recving data \n" );
recvfrom ( s , ( char * ) & RecvData , sizeof ( RecvData ) ,
0 , ( SOCKADDR * ) & saddrRecv , &AddrLen );
// 卡在这里,下一句从来没打印成功过。
printf ( "finish recving data! \n"
"\n" );
}

printf ( "press anykey to continue. \n" );
_getch ();

return 0;
}


这里是我参考的python代码:

#-*- coding:utf-8 -*-