本帖最后由 crysky7ye 于 2018-4-25 09:06 编辑
废话不多说直接上链接
链接:https://pan.baidu.com/s/1uX5kS9Mp6PKNWgOlDolNNw 密码:tbdg
说明:
小弟初学mfc,斗胆编了一个远程软件,用到了socket通信技术,如有不足请各位大牛指点。
1、需求改进的地方,希望各位大牛能把MFCClient的void CMFCClientDlg::OnBnClickedButton1()去掉,MFCSerev发消息,MFCClient直接响应。
貌似用到了消息循环小弟不大懂,各位大牛指点。
2、请教各位大牛,互联网的socket通讯怎么改写一下。万分感谢。
MFCSerev发消息:
[C++] 纯文本查看 复制代码 void CMFCSerevDlg::OnBnClickedButton1()
{
WSAData wsadata;
do
{
if (0!=WSAStartup(MAKEWORD(2,2),&wsadata))
break;
if(2!=LOBYTE(wsadata.wVersion)||2!=HIBYTE(wsadata.wVersion))
break;
SOCKET sock_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in addr_server = { 0 };
addr_server.sin_family = AF_INET;
addr_server.sin_port = htons(18080);//端口
bind(sock_server, (SOCKADDR*)&addr_server, sizeof(addr_server));
listen(sock_server, SOMAXCONN);
SOCKET sock_client=accept(sock_server, nullptr, nullptr);
//判断函数传入值
int nSel;
// 获取组合框控件的列表框中选中项的索引
nSel = m_comb1.GetCurSel();
send(sock_client, (char*)&nSel, sizeof(nSel),0);
} while (FALSE);
}
[Asm] 纯文本查看 复制代码 void CMFCClientDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
do
{
WSAData wsadata;
if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
break;
if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion))
break;
SOCKET sock_connent = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in addr_server = { 0 };
addr_server.sin_family = AF_INET;
addr_server.sin_port = htons(18080);
addr_server.sin_addr.S_un.S_addr = inet_addr("局域网内服务器的IP");
connect(sock_connent, (SOCKADDR*)&addr_server, sizeof(addr_server));
int nControl = 0;
recv(sock_connent, (char*)&nControl, sizeof(int), 0);
//关机,重启,注销等操作
switch (nControl)
{
case 0:
Logoff(FALSE); //注销
break; //执行完成后跳出
case 1:
Reboot(FALSE); //重启
break;
case 2:
Shutdown(FALSE); //关机
break;
case 3:
Logoff(TRUE); //强制注销
break;
case 4:
Reboot(TRUE); //强制重启
break;
case 5:
Shutdown(TRUE); //强制关机
break;
default:
break; //如果i 不符合以上条件直接跳出不执行任何东西
}
} while (FALSE);
}
|