我一直在搜索谷歌一段时间,但我遇到的问题是我不确定我需要搜索的是什么。 (搜索PHP C ++通信似乎不是我需要的)我基本上是为游戏服务器开发一个c ++插件,我想创建一个可以向/从C ++插件传递数据的Web界面。游戏已经使用RCON端口进行远程管理访问,但我偶然发现了他们使用的网络接口的标题,所以我想我可以使用它。
我的问题是我对使用套接字不是很熟悉。我假设我基本上需要在C ++中打开一个套接字并让它监听,然后在PHP中,连接到该套接字,传递数据并关闭它。
这是界面...... http://www.ampaste.net/m2f6b6dbc
我大部分时间都会像当前连接的玩家名单,名字和分数那样提取信息。并传递命令以重新启动服务器,关闭它等等。
任何帮助都会很棒,谢谢!
答案 0 :(得分:5)
你可以试试Thrift。它是由Facebook的工程师编写的,现在它是一个Apache项目。
Thrift是可扩展的跨语言服务开发的软件框架。它将软件堆栈与代码生成引擎相结合,以构建在C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml之间高效无缝工作的服务。
链接:http://incubator.apache.org/thrift/
简而言之,它完全符合您的要求。它使不同语言可以轻松地相互通信。您可以在PHP中调用函数,而不是试图提出一些基于套接字的通信协议:
$game->getScores();
它会自动插入到C / C ++程序中名为getScores的函数中。唯一的缺点是配置正确可能有点痛苦。
答案 1 :(得分:3)
我敢于建议使用一些标准的分布式组件通信方式,例如XML RPC。 PHP和C ++都有库:http://en.wikipedia.org/wiki/XML-RPC#Implementations
这种方法可以防止您在通信协议实施过程中重新发明轮子,并且可以进一步降低维护成本。
答案 2 :(得分:3)
是的,是的,这就是我给我12岁女儿的描述 - 但如果你要让一个以上的客户连接其中更多的参与者。特别是如果您将代码固定到现有服务器上。所以请阅读socket programming FAQ。我假设我基本上需要在C ++中打开一个套接字并让它继续监听
您确实需要定义在套接字上传输时如何表示数据的协议。这些都是很多'标准方法 - 但有时像CORBA / SOAP等东西可能比从头开始一样过度和努力。
如果您正在使用现有服务器上的代码,那么如果您使用当前套接字并在必要时扩展协议,生活将变得更加简单。
编写套接字服务器有3种模式 - 您提供的代码片段似乎不包含您当前使用的详细信息:
这有变化 - p2可能接受进一步的连接,p1可能在连接进入之前进行分叉)
答案 3 :(得分:0)
你想要谷歌的东西是C ++客户端/服务器。我可以在这里建议两种方法。
首先,将创建一个非常基本的HTTP协议服务器,以便您的php脚本可以简单地转到http://yourip/并通过POST变量发送命令。您可以在https://stackoverflow.com/questions/175507/c-c-web-server-library
找到C ++ Web服务器的示例允许更多灵活性的第二种方法是构建自己的基本协议,并使用PHP的SOCKETS连接到服务器并发送命令。您可以在http://www.codeproject.com/KB/IP/client_server_socket.aspx找到C ++客户端/服务器应用程序的示例。请记住,对于C ++端,您只关心服务器部分。您可以使用套接字在PHP中找到基本的PING客户端,位于以下URL:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786。还有一些类可以处理大部分协议部分,但我不知道这两种语言都有用。
请注意我没有测试过我链接的任何代码。我只是在google上找到了它们。
答案 4 :(得分:0)
一个好的起点是http://php.net/manual/en/book.sockets.php。
基本上,您将为PHP创建另一个远程管理端口和方法。当然,如果您只接受来自一个IP的Web通信,那么这是保护它的好方法(检查并允许仅访问将连接的一个IP)。但是,您需要C ++服务器监听(安全?)端口并让PHP连接到它(只要主机允许它)。
总的来说,如果你已经有一台服务器在运行,那么从C ++方面来看应该很简单。从PHP方面你需要做的就是研究连接到不同的服务器并传递信息(PHP能够有效地完成这些工作)
但是,这显然是海报的替代品2.我个人喜欢(在很多情况下)“重新发明轮子”,以便能够管理我自己的工作。但是,当然,这并不总是因成本或其他原因而有效。
祝你好运!