/************************************************************
FileName: RpcServer.cpp
Author: tjp
Description: 此文件实现程序主界面
Function List:
History:
<author> <time> <desc>
***********************************************************/
#include "stdafx.h"
#include "rpcserver.h"
#include "rpcserverDlg.h"
#include "adddlg.h"
#include "searchdlg.h"
#include "FileDlg.h"
#include "update.h"
#include "Winsock2.h"
#include "..\RpcIdl\RpcInterface_h.h"
//const unsigned char version[] = "1.1";
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define ID_POP_TRANSFILE 0
// CRpcServerDlg 对话框
#define IDM_MENU0 0
#define IDM_MENU1 1
#define IDM_MENU2 2
#define IDM_MENU3 3
#define IDM_ITEM0 10
#define IDM_ITEM1 11
#define IDM_ITEM2 12
#define IDM_ITEM3 13
#define IDM_ITEM4 14
#define IDM_ITEM5 15
#define IDM_ITEM6 16
CRpcServerDlg::CRpcServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRpcServerDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRpcServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTONDEL, ButtonDel);
DDX_Control(pDX, IDC_CLIENTLIST, ClientList);
DDX_Control(pDX, IDC_BUTTON_UPDATE, ButtonUpdate);
}
BEGIN_MESSAGE_MAP(CRpcServerDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_NOTIFY(TTN_GETDISPINFO, IDC_CUSTOM1, &CRpcServerDlg::OnTtnGetDispInfoCustom1)
ON_LBN_SELCHANGE(IDC_LIST2, &CRpcServerDlg::OnLbnSelchangeList2)
ON_BN_CLICKED(IDOK, &CRpcServerDlg::OnBnClickedOk)
ON_LBN_SETFOCUS(IDC_LIST1, &CRpcServerDlg::OnLbnSetfocusList1)
ON_BN_CLICKED(IDC_BUTTONADD, &CRpcServerDlg::OnBnClickedButtonadd)
ON_BN_CLICKED(IDC_BUTTONDEL, &CRpcServerDlg::OnBnClickedButtondel)
ON_LBN_SELCHANGE(IDC_CLIENTS, &CRpcServerDlg::OnLbnSelchangeClients)
ON_LBN_SETFOCUS(IDC_CLIENTS, &CRpcServerDlg::OnLbnSetfocusClients)
ON_BN_CLICKED(IDC_SEARCH_C, &CRpcServerDlg::OnBnClickedSearchC)
ON_WM_SHOWWINDOW()
ON_NOTIFY(NM_RCLICK, IDC_CLIENTLIST, &CRpcServerDlg::OnNMRclickClientlist)
ON_COMMAND(ID_ITEM_TRANSFILE, &CRpcServerDlg::OnItemTransfile)
ON_NOTIFY(NM_CLICK, IDC_CLIENTLIST, &CRpcServerDlg::OnNMClickClientlist)
ON_BN_CLICKED(IDC_BUTTON_UPDATE, &CRpcServerDlg::OnBnClickedButtonUpdate)
ON_NOTIFY(LVN_INSERTITEM, IDC_CLIENTLIST, &CRpcServerDlg::OnLvnInsertitemClientlist)
ON_COMMAND(ID_ITEM_LOGOFF, &CRpcServerDlg::OnItemLogoff)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_CLIENTLIST, &CRpcServerDlg::OnLvnItemchangedClientlist)
ON_COMMAND(ID_ITEM_SHUTDOWN, &CRpcServerDlg::OnItemShutdown)
ON_COMMAND(ID_ITEM_REBOOT, &CRpcServerDlg::OnItemReboot)
ON_BN_CLICKED(IDC_BUTTON_REFRESH, &CRpcServerDlg::OnBnClickedButtonRefresh)
ON_NOTIFY(NM_SETFOCUS, IDC_CLIENTLIST, &CRpcServerDlg::OnNMSetfocusClientlist)
ON_BN_CLICKED(IDC_BUTTON_CANCLE, &CRpcServerDlg::OnBnClickedButtonCancle)
END_MESSAGE_MAP()
// CRpcServerDlg 消息处理程序
BOOL CRpcServerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CRpcServerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CRpcServerDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CRpcServerDlg::OnTtnGetDispInfoCustom1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTTDISPINFO pNMTTDI = reinterpret_cast<LPNMTTDISPINFO>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CRpcServerDlg::OnLbnSelchangeList2()
{
// TODO: Add your control notification handler code here
}
void CRpcServerDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnOK();
}
void CRpcServerDlg::OnLbnSetfocusList1()
{
// TODO: Add your control notification handler code here
}
//点击增加按钮,弹出增加客户端对话框,对话框结束后,
//指定的IP段的客户端IP被添加到程序主界面客户端列表
void CRpcServerDlg::OnBnClickedButtonadd()
{
//char ipbegin[16], ipend[16];
RPC_STATUS rpcStatus;
char* szStringBinding = NULL;
RPC_ASYNC_STATE* Async;
char szMsg[100];
int iTestResult = 0;
bool* bOnline;
struct in_addr ipbegin, ipend, ip;
ipbegin.S_un.S_addr = 0;
ipend.S_un.S_addr = 0;
LVFINDINFO lvItemInfor;
LVITEM ListItem;
CAddDlg dlg;
int nIpNum;
int index;
int nClientCount;
dlg.setipaddress( ipbegin, ipend );
dlg.DoModal();
ip = ipbegin;
nIpNum = ipend.S_un.S_un_b.s_b4 - ipbegin.S_un.S_un_b.s_b4 + 1;
if ( nIpNum < 0 )//如果开始IP小于结束IP,不添加
{
return;
}
lvItemInfor.flags = LVFI_STRING;
Async = new RPC_ASYNC_STATE[ nIpNum ];
bOnline = new bool[ nIpNum ];
if ( strcmp( "0.0.0.0", inet_ntoa (ip) )!= 0 )
{
for ( index = 0; index < nIpNum ; ++index )
{
lvItemInfor.psz = inet_ntoa (ip);
//MessageBox( inet_ntoa (ip) );
if ( ClientList.FindItem( &lvItemInfor, -1 ) == -1 )
{
//MessageBox( inet_ntoa (ip) );
rpcStatus = RpcStringBindingCompose( NULL, // UUID to bind to.
(RPC_CSTR)("ncacn_ip_tcp"),
(RPC_CSTR)(inet_ntoa ( ip )) , //address to use,
(RPC_CSTR)("4747"), // TCP/IP port to use.
NULL, // Protocol dependent network options to use.
(RPC_CSTR *)&szStringBinding);
if ( rpcStatus )
{
wsprintf(szMsg,"RpcStringBindingCompose failed:0x%x",rpcStatus);
MessageBox((LPCSTR)szMsg,NULL,MB_OK);
return;
}
// Validates the format of the string binding handle and converts
// Connection is not done here either.
//MessageBox("RpcBindingFromStringBinding");
rpcStatus = RpcBindingFromStringBinding((RPC_CSTR)szStringBinding,// The string binding to validate.
&hRpcDemoBinding); // Put the result in the implicit binding
// handle defined in the IDL file.
if (rpcStatus != RPC_S_OK)
{
wsprintf(szMsg,"RpcBindingFromStringBinding failed:0x%x",rpcStatus);
MessageBox( (LPCSTR)szMsg,NULL,MB_OK);
return;
}
RpcTryExcept
{
rpcStatus = RpcAsyncInitializeHandle( &Async[index], sizeof(RPC_ASYNC_STATE) );
if ( rpcStatus )
{
// Code to handle the error goes here.
sprintf(szMsg, "RpcAsyncInitializeHandle failed:0x%x", GetLastError() );
MessageBox( szMsg );
return;
}
Async[index].UserInfo = NULL;
Async[index].NotificationType = RpcNotificationTypeEvent;
Async[index].u.hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
if (Async[index].u.hEvent == 0)
{
// Code to handle the error goes here.
sprintf(szMsg, "CreateEvent failed:0x%x", GetLastError() );
MessageBox( szMsg );
return;
}
::TestClient( &Async[index], &iTestResult );//测试客户端是否在线
if ( WaitForSingleObject( Async[index].u.hEvent, 500 ) == WAIT_FAILED )
{
//RpcRaiseException(APP_ERROR);
sprintf(szMsg, "WaitForSingleOb
没有合适的资源?快使用搜索试试~ 我知道了~
RPC.rar_RPC c_rpc file transfer_远程 文件_远程关机
共45个文件
h:14个
cpp:13个
svn-base:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 122 浏览量
2022-09-24
00:44:43
上传
评论
收藏 92KB RAR 举报
温馨提示
Windows RPC的简单实现,具有文件传输,远程执行,远程关机,远程注销等功能。
资源推荐
资源详情
资源评论
收起资源包目录
RPC.rar (45个子文件)
RpcIdl
RpcInterface_h.h 3KB
RpcInterface.acf 243B
RpcServer_s.cpp 19KB
RpcClient_c.cpp 21KB
RpcInterface.idl 2KB
RpcServer
stdafx.cpp 136B
OpenFile.h 442B
res
.svn
all-wcprops 214B
prop-base
test1.ico.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
test1.ico.svn-base 21KB
entries 367B
format 2B
test1.ico 21KB
RpcServerDlg.h 2KB
stdafx.h 2KB
RpcServer.cpp 2KB
FileDlg.cpp 12KB
RpcServerDlg.cpp 31KB
OpenFile.cpp 559B
SearchDlg.cpp 9KB
RpcServer.h 549B
Update.cpp 18KB
RpcServer.rc 9KB
SearchDlg.h 1KB
resource.h 3KB
FileDlg.h 1KB
Update.h 1KB
Adddlg.cpp 3KB
Adddlg.h 1KB
RpcClient
stdafx.cpp 209B
RpcClientDlg.cpp 8KB
res
RpcClient.ico 21KB
RpcClient.rc2 400B
.svn
all-wcprops 347B
prop-base
RpcClient.ico.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
RpcClient.ico.svn-base 21KB
RpcClient.rc2.svn-base 400B
entries 495B
format 2B
stdafx.h 3KB
RpcClient.rc 4KB
resource.h 909B
RpcClient.cpp 11KB
RpcClient.h 522B
RpcClientDlg.h 1KB
共 45 条
- 1
资源评论
JonSco
- 粉丝: 66
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功