server.cpp

来自「visual c++网络通信程序开发指南附带的程序所有的源码。」· C++ 代码 · 共 67 行

CPP
67
字号
// Server.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


int main(int argc, char* argv[])
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	char ReadBuf[100];
	DWORD ReadNum;
	
	// 管道读句柄
	HANDLE hRead;

	// 管道写句柄
	HANDLE hWrite;

	// 创建匿名管道
	BOOL bRet = CreatePipe(&hRead, &hWrite, NULL, 0);
	if (bRet == TRUE)
		printf("成功创建匿名管道!\n");
	else
		printf("创建匿名管道失败,错误代码:%d\n", GetLastError());

	// 得到本进程的当前标准输出
	HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE);

	// 设置标准输出到匿名管道
	SetStdHandle(STD_OUTPUT_HANDLE, hWrite);

	// 获取本进程的STARTUPINFO结构信息
	GetStartupInfo(&si);

	// 创建子进程
	bRet = CreateProcess(NULL, "Client.exe", NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi);

	// 恢复本进程的标准输出
	SetStdHandle(STD_OUTPUT_HANDLE, hTemp);

	// 输入信息
	if (bRet == TRUE)
		printf("成功创建子进程!\n");
	else
		printf("创建子进程失败,错误代码:%d\n", GetLastError());
	
	// 关闭写句柄
	CloseHandle(hWrite);

	// 读管道直至管道关闭
	while (ReadFile(hRead, ReadBuf, 100, &ReadNum, NULL))
	{
		ReadBuf[ReadNum] = '\0';
		printf("从管道[%s]读取%d字节数据\n", ReadBuf, ReadNum);
	}

	// 输出信息
	if (GetLastError() == ERROR_BROKEN_PIPE)
		printf("管道被子进程关闭\n");
	else
		printf("读数据错误,错误代码:%d\n", GetLastError());

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?