在这几天的工作过程中,需要实现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++编程语言的基础知识和高级技巧。这个安装包包含了所有必要的组件,使得用户可以...
应用篇通过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_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++ 程序设计的小伙伴们,你们的成长是我最大的幸福
在linux平台下,涉及到unix套节字编程,用C/C++实现代理服务器,是基于TCP/IP和HTTP协议的编程
C语言\C_C++程序设计学习与实验系统,C语言设计与学习,包含C语言知识.
C/C++ API 帮助文档大全是一份全面的资源,包含了C和C++编程语言的各类API接口和函数的详细信息。这份文档通常以CHM(Compiled Help Manual)格式存在,这是一种由微软开发的、用于存储HTML帮助文档的压缩格式。通过...
还具有二级C语言模拟考试与自动评分试题解析功能,同时与软件配套的《C/C++程序设计教程(配有同步实验、流程控制语句动画演示、提供教程中所有程序实例、实验、作业中的源代码(全部用VC6编译器调试通过)》融入了...
C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福
精通MATLAB C/C++混合程序设计,精通MATLAB C/C++混合程序设计,精通MATLAB C/C++混合程序设计
C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福
3. 网络与通信应用编程:这部分内容涉及如何使用Visual C/C++开发网络应用程序,这些应用程序可以通过网络与其他计算机、服务器或者设备交换数据。网络编程可能包括创建服务器和客户端应用、实现网络协议栈、数据...