为什么小弟我写的网络授时小程序总是不能正常运行?

为什么我写的网络授时小程序总是不能正常运行??
下面是我的关键代码:
                WSADATA wsaData;
//初始化Socket库
WSAStartup(MAKEWORD(2,0),&wsaData);
//创建一根电线
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
//设置电线连接服务器端的端口
sa.sin_port = htons(IPPORT_TIMESERVER);
sa.sin_addr.S_un.S_addr = inet_addr("210.72.145.8");
connect(sock,(SOCKADDR *)&sa,sizeof(sa));

unsigned long ulTime;
TCHAR buff[256];

recv(sock, (char *)&ulTime, sizeof(ulTime), 0);

ulTime = ntohl(ulTime);

SYSTEMTIME st;
UINT64 uiCurTime, uiBaseTime, uiResult; 
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME; 
uiCurTime = (UINT64)ulTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime; 
FileTimeToSystemTime((LPFILETIME)&uiResult, &st);

memset(buff, 0, sizeof(0));
wsprintf(buff, "%i年%i月%i日 %i:%i:%i", st.wYear, st.wMonth, st.wDay, st.wHour+8, st.wMinute, st.wSecond);

MessageBox(hwnd, buff, TEXT("当前时间"), MB_OK);
每次运行的时候总是请求超时,偶尔成功的时候每次返回的时间都不对,而且是同一个值
如图
为什么小弟我写的网络授时小程序总是不能正常运行?
每次都是这个时间,不知道为什么。
我考虑到了网络字节序和主机字节序的问题,但是怎么会每次接受到的时间都不变呢??而且往往接收不到,是请求超时

------解决方案--------------------
connect(sock,(SOCKADDR *)&sa,sizeof(sa));
就失败了。
recv(sock, (char *)&ulTime, sizeof(ulTime), 0);
同样失败。
你把
unsigned long ulTime;
改成
unsigned long ulTime = 0;
看看结果是什么呢?