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

简介: #include "stdafx.h"#include #include #include #include "resource.h"#include "MainDlg.
#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); 
}



相关文章
|
19天前
|
Linux 网络安全 数据安全/隐私保护
SSH工具连接远程服务器或者本地Linux系统
SSH工具连接远程服务器或者本地Linux系统
20 0
|
4天前
|
运维 数据安全/隐私保护
Finalshell 私钥连接服务器
Finalshell 私钥连接服务器
12 0
|
1天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
13 6
|
13天前
|
C++
C++入门项目——通讯管理系统
C++入门项目——通讯管理系统
|
16天前
|
监控 Linux 网络安全
Linux服务器如何查询连接服务器的IP
【4月更文挑战第17天】Linux服务器如何查询连接服务器的IP
15 1
|
20天前
|
消息中间件 数据安全/隐私保护
MQTT微消息队列服务器连接报错:Error: Connection refused: Not authorized
使用MQTTX工具进行测试时,通过AccessKey创建了Client ID的用户名和密码。配置了公网接入点及端口1883,但尝试连接时出现错误。已附上工具截图:![](https://ucc.alicdn.com/pic/developer-ecology/3byii5uar64gg_36327474e991439da422f38c450ef153.png)。确认过用户名、密码和Client ID无误,问题仍未解决,期待回复!
|
22天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
23天前
|
安全 网络安全
代理服务器拒绝连接怎么办
代理服务器拒绝连接怎么办
|
25天前
云服务器初次连接宝塔,连接不上
云服务器初次连接宝塔,连接不上
16 0
|
1月前
|
人工智能 算法 BI
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接