在这几天的工作过程中,需要实现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);
}
分享到:
相关推荐
应用篇通过PC与PC、PC与单片机、PC与智能仪器、PC与PLC、PC与GSM短信模块、PC与远程I/O模块等典型应用实例,详细介绍了C/C++语言利用MSComm控件、API函数实现串口通信的程序设计方法。每个实例的设计任务同时采用C++...
原名《Turbo C/C++ for Windows 集成实验与学习环境》,现已更名为《C/C++程序设计学习与实验系统》,现在已全面支持最新操作系统VISTA,它由从事一线教学的大学教师根据C/C++初学者的特点,量身定制的一个简单易用的...
C++的命名管道提供了进程间通信的强大工具,适用于多种场景,如服务端与客户端的交互、后台程序与用户界面的通信等。通过理解并掌握创建、连接和通信的基本步骤,开发者可以灵活地构建自己的命名管道解决方案。在...
《精通Matlab与C/C++混合程序设计》第三版是一本深入探讨如何将两种强大的编程语言结合使用的专业书籍。在当今的科学计算和工程应用中,Matlab以其强大的数学计算能力受到广泛欢迎,而C/C++则以其高效、灵活和广泛的...
【压缩包子文件的文件名称列表】"C_Cpp课件 在 Ytlx0210 上" 暗示了课件的具体内容可能被组织在以"C_Cpp"命名的文件夹内,可能包含各个章节的资料,如"C++基础"、"C语言概述"、"指针与内存管理"、"类与对象"等。...
《C/C++程序设计教程》是一本面向初学者和进阶者的编程教材,旨在帮助学习者掌握C语言和C++的基础知识。课程首先介绍了计算机系统的组成,包括硬件系统(如CPU、内存、外存和输入输出设备)、软件系统(如操作系统、...
C语言/C++基础之爱心程序源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福
"林锐 《高质量C/C++编程》" 通过分析林锐的《高质量C/C++编程...通过分析林锐的《高质量C/C++编程》DOC文档,我们可以了解到编写高质量C++/C程序的重要性和必要性,并且掌握了编写高质量C++/C程序的基本原则和方法。
与软件配套的《 C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过))》融入了作者多年的教学和学习经验、编程建议、编程感悟,新增...
C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福
C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了...通过深入学习和理解这些API,你将能够更好地利用C/C++的强大功能,编写出高效、可靠且易于维护的代码。
C语言/C++基础之冰墩墩源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福
在IT领域,C/C++语言被广泛用于开发服务器与客户端应用程序,特别是在网络通信中,TCP(传输控制协议)是常用的一种面向连接的、可靠的、基于字节流的传输层通信协议。本项目“c/c++服务器与客户端程序”显然关注的...
C语言\C_C++程序设计学习与实验系统,C语言设计与学习,包含C语言知识.
【标题】"C/C++程序设计学习与实验系统"是一个专为初学者和进阶者设计的集成学习环境,旨在帮助用户深入理解和实践C和C++编程语言。这个系统通常包含一系列教学资源、实例代码、练习题以及可能的调试工具,以支持全...
C/C++ API 帮助文档大全是一份全面的资源,包含了C和C++编程语言的各类API接口和函数的详细信息。这份文档通常以CHM(Compiled Help Manual)格式存在,这是一种由微软开发的、用于存储HTML帮助文档的压缩格式。通过...
根据提供的文件信息,本篇文章将围绕“C/C++完整视频教程(三)——Linux服务器编程”这一主题展开,深入解析该教程所涵盖的关键知识点。由于实际视频内容无法直接获取,以下解析将基于标题、描述及标签提供的信息...
还具有二级C语言模拟考试与自动评分试题解析功能,同时与软件配套的《C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过)》融入了...
C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福