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); 
}



相关文章
|
4月前
|
安全
基于Reactor模式的高性能服务器之Acceptor组件(处理连接)
本节介绍了对底层 Socket 进行封装的设计与实现,通过 `Socket` 类隐藏系统调用细节,提供简洁、安全、可读性强的接口。重点包括 `Socket` 类的核心作用(管理 `sockfd_`)、成员函数的功能(如绑定地址、监听、接受连接等),以及 `Acceptor` 组件的职责:监听连接、接收新客户端连接并分发给上层处理。同时说明了 `Acceptor` 与 `EventLoop` 和 `TcpServer` 的协作关系,并展示了其成员变量和关键函数的工作机制。
118 2
|
3月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle客户端与服务器端连接建立的过程
Oracle数据库采用客户端-服务器架构,客户端通过其网络环境与服务器通信,实现数据库访问。监听程序负责建立连接,通过命令lsnrctl可启动、停止及查看监听状态。本文介绍了监听器的作用及相关基础管理操作。
193 0
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
150 0
|
7月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
467 14
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
3926 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
IDE 网络安全 开发工具
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
本文介绍了如何使用VS Code通过Remote-SSH插件连接远程服务器进行代码开发,并与PyCharm进行了对比。作者认为VS Code在连接和配置多个服务器时更为简单,推荐使用VS Code。文章详细说明了VS Code的安装、远程插件安装、SSH配置文件编写、服务器连接以及如何在连接后切换文件夹。此外,还提供了使用密钥进行免密登录的方法和解决权限问题的步骤。
5408 0
IDE之vscode:连接远程服务器代码(亲测OK),与pycharm链接服务器做对比(亲自使用过了),打开文件夹后切换文件夹。
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
263 3
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
2558 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?

热门文章

最新文章