c++ windowsSocket通讯连接效时服务器并获取返回消息简单用例

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <WINSOCK2.H>
#include "resource.h"
#include "MainDlg.h"
#define HIGHTIME 21968699
#define LOWTIME  4259332096 
/*
*/
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
		HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }

    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
		{
			SocketTest();
		}
        break;
        default:
		break;
    }
}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}
void SocketTest()
{
在连接中加上 WSOCK32.LIB
	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);//端口号
	//218.107.63.213是ping smtp.163.com出来的

	sa.sin_addr.S_un.S_addr = inet_addr("218.107.63.213");//www.time.ac.cn-210.72.145.8

	if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
	{
		ShowError();
		return;
	}
/*
	//接收连接到的消息1
	TCHAR buff[256];
	ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));
	recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0);
	MessageBox(NULL,buff,"返回消息",MB_OK);
	//发消息1
	TCHAR msg[]="QUIT\n";
	send(sock,msg,sizeof(msg)/sizeof(TCHAR),0);
	ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));
	recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0);
	MessageBox(NULL,buff,"返回消息",MB_OK);
*/
	//接收连接到的消息2
	unsigned long ulTime=0;
	recv(sock,(char*)&ulTime,sizeof(unsigned long),0);
	ulTime=ntohl(ulTime);//把网络字节序转化为本机字节序
	TCHAR buff1[256]={0};
	wsprintf(buff1,"%i",ulTime);
	MessageBox(NULL,buff1,"返回消息",MB_OK);//获取到的时间不对,www.time.ac.cn有问题,直接放到 http://tool.chinaz.com/Tools/unixtime.aspx 转换都不对。
	把unix时间转化为系统时间
	SYSTEMTIME st;
	UINT64 uiCurtime,uiBasetime,uiResult;
	uiBasetime=((UINT64)HIGHTIME<<32)+LOWTIME;
	uiCurtime=(UINT64)ulTime*(UINT64)10000000;
	uiResult=uiBasetime+uiCurtime;
	uiResult=uiBasetime;
	FileTimeToSystemTime((LPFILETIME)&uiResult,&st);
	TCHAR buff[256]={0};
	wsprintf(buff,"%d年%d月%d日 %d:%d:%d",st.wYear,st.wMonth,st.wDay,st.wHour+8,st.wMinute,st.wSecond);
	MessageBox(NULL,buff,"返回消息",MB_OK);
	//设置系统时间
	//SetSystemTime(&st);
	closesocket(sock);
	WSACleanup();

}
void ShowError()
{
TCHAR* lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区
			  FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息
			  NULL,GetLastError(), //获取错误信息标识
			  MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言
			  (LPTSTR)&lpMsgBuf, //消息缓冲区
			  0,
			  NULL);
MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR); 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值