`
rcfalcon
  • 浏览: 228677 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP服务器端通过命名管道与C/C++程序通信

阅读更多

在这几天的工作过程中,需要实现PHP在服务器端能与其他程序通信。和老何俩人研究了半天,终于大致弄出了一个用WINDOWS的命名管道通信的方法。

 

有几点需要注意的:

 

PHP服务器端我们每次都是重新挂接命名管道。(这样写,PHP端代码量极其少,而且也很方便。)

 

那么我们用C/C++写的命名管道服务器则需要每次通信都创建一次管道(方法很恶心,但是暂时能实现,而且对效率要求不是那么高。我们就这么用了。)

 

如果不是每次都创建管道的话,会出现109错误——这个问题我们调了N久……

 

还有一个时序问题,在管道SERVER端每次关闭后,需要等PHP端从管道中取完数据,再重新创建管道。(此处我们为图方便,暂时用的sleep。)

 

下面给出例子:

 

PHP客户端

function Pipe($msg)   
{   
  $fp = @fopen("\\\\.\\pipe\\tongxun", 'w+r+b');   
  @fwrite($fp,$msg);//写   
  $result = @fread($fp,256);//读   
  fclose($fp);   
}  

 

 

C++服务器端

while(1)
{
	// 创建管道服务器
	char strPipeName[] = "\\\\.\\pipe\\tongxun";
	char szBuf[1024] = {0};
	DWORD dwRead ;
	DWORD userID;
	char cmd;
	
	PSECURITY_DESCRIPTOR psd;
	psd = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
	if (!InitializeSecurityDescriptor(psd, SECURITY_DESCRIPTOR_REVISION))
	{
		LocalFree((HLOCAL)psd);
		return -1;
	}
	if (!SetSecurityDescriptorDacl(psd, TRUE, (PACL)NULL, FALSE))
	{
		LocalFree((HLOCAL)psd);
		return -1;
	}
	SECURITY_ATTRIBUTES saAttr;
	saAttr.nLength =sizeof(SECURITY_ATTRIBUTES);
	saAttr.lpSecurityDescriptor = psd;
	saAttr.bInheritHandle = TRUE;
	HANDLE hIPC = CreateNamedPipe(strPipeName, 
			PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 
			PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 
			1, 0, 0, 1000, &saAttr);
	if (hIPC == INVALID_HANDLE_VALUE)
	{
		return -1;
	}
	// 连接管道
	ConnectNamedPipe(hIPC, NULL);
	// 从管道读取信息
	if (!ReadFile(hIPC, szBuf, sizeof(szBuf), &dwRead, 0))
	{
		break;
	}
	//处理读到的数据szBuf...	
         ....

    //写数据...
    //如WriteFile(hIPC, msg, strlen(msg), &dwWrite, NULL)

	CloseHandle(hIPC);
	Sleep(100);
}

 

分享到:
评论

相关推荐

    C/C++程序设计学习与实验系统

    《C/C++程序设计学习与实验系统》是一个专为初学者和进阶者设计的集成环境,它提供了全面的学习资源和实践平台,旨在帮助用户掌握C/C++编程语言的基础知识和高级技巧。这个安装包包含了所有必要的组件,使得用户可以...

    C/C++串口通信典型应用实例编程实践.(电子工业.曹卫杉)

    应用篇通过PC与PC、PC与单片机、PC与智能仪器、PC与PLC、PC与GSM短信模块、PC与远程I/O模块等典型应用实例,详细介绍了C/C++语言利用MSComm控件、API函数实现串口通信的程序设计方法。每个实例的设计任务同时采用C++...

    C/C++程序设计学习与实验系统 V2008.13.part1

    原名《Turbo C/C++ for Windows 集成实验与学习环境》,现已更名为《C/C++程序设计学习与实验系统》,现在已全面支持最新操作系统VISTA,它由从事一线教学的大学教师根据C/C++初学者的特点,量身定制的一个简单易用的...

    c/c++语言程序设计课件

    【压缩包子文件的文件名称列表】"C_Cpp课件 在 Ytlx0210 上" 暗示了课件的具体内容可能被组织在以"C_Cpp"命名的文件夹内,可能包含各个章节的资料,如"C++基础"、"C语言概述"、"指针与内存管理"、"类与对象"等。...

    C/C++程序设计教程》电子教案

    《C/C++程序设计教程》是一本面向初学者和进阶者的编程教材,旨在帮助学习者掌握C语言和C++的基础知识。课程首先介绍了计算机系统的组成,包括硬件系统(如CPU、内存、外存和输入输出设备)、软件系统(如操作系统、...

    C语言/C++基础之爱心程序源码

    C语言/C++基础之爱心程序源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    林锐 《高质量C/C++编程》

    "林锐 《高质量C/C++编程》" 通过分析林锐的《高质量C/C++编程...通过分析林锐的《高质量C/C++编程》DOC文档,我们可以了解到编写高质量C++/C程序的重要性和必要性,并且掌握了编写高质量C++/C程序的基本原则和方法。

    c/c++程序设计学习与实验系统

    与软件配套的《 C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增...

    C语言/C++基础之爱心源码

    C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    c/c++中文帮助文档(API)

    C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了...通过深入学习和理解这些API,你将能够更好地利用C/C++的强大功能,编写出高效、可靠且易于维护的代码。

    C语言/C++基础之冰墩墩源码

    C语言/C++基础之冰墩墩源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    linux下用C/C++实现的代理服务器

    在linux平台下,涉及到unix套节字编程,用C/C++实现代理服务器,是基于TCP/IP和HTTP协议的编程

    C_C++程序设计学习与实验系统

    C语言\C_C++程序设计学习与实验系统,C语言设计与学习,包含C语言知识.

    C/C++ API 帮助文档大全(中文,chm格式)

    C/C++ API 帮助文档大全是一份全面的资源,包含了C和C++编程语言的各类API接口和函数的详细信息。这份文档通常以CHM(Compiled Help Manual)格式存在,这是一种由微软开发的、用于存储HTML帮助文档的压缩格式。通过...

    C与C++程序设计学习与实验系统.rar

    还具有二级C语言模拟考试与自动评分试题解析功能,同时与软件配套的《C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过)》融入了...

    基于C语言/C++基础的跨年烟花代码

    C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    精通MATLAB C/C++混合程序设计(第三版)

    精通MATLAB C/C++混合程序设计,精通MATLAB C/C++混合程序设计,精通MATLAB C/C++混合程序设计

    C语言/C++基础之跨年烟花代码

    C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    Visual C/C++编程精选集锦 网络与通信分册

    3. 网络与通信应用编程:这部分内容涉及如何使用Visual C/C++开发网络应用程序,这些应用程序可以通过网络与其他计算机、服务器或者设备交换数据。网络编程可能包括创建服务器和客户端应用、实现网络协议栈、数据...

Global site tag (gtag.js) - Google Analytics