Python和C之间的与操作系统无关的程序间通信

问题描述 投票:6回答:6

我几乎不知道我在这里做什么,我以前从未做过这样的事情,但是我和一个朋友正在编写竞争性的国际象棋程序,他们需要能够相互交流。

他将主要用C编写,我的大部分将用Python编写,我可以看到一些选择:

  • 或者写入一个或多个临时文件。由于通信不会以任何方式进行,因此可以正常工作,但对我来说似乎是一个丑陋的解决方法,程序将不得不继续检查更改/新文件,这看起来很丑陋。
  • [找到某种操纵管道的方法,例如mine.py | ./他的。这似乎有点死胡同。
  • 使用套接字。但是我不知道自己会做什么,所以有人可以给我一些阅读材料的指导吗?我不确定是否有与操作系统无关,与语言无关的方法。是否需要某种主管服务器程序才能进行管理?
  • 使用某种HTML协议,这似乎有些过分。我不介意程序必须在同一台计算机上运行。

人们推荐什么,我可以从哪里开始阅读?

python c networking network-protocols inter-process-communicat
6个回答
7
投票

如果您想要并需要真正的OS独立,语言独立的进程间通信,套接字可能是最佳选择。

这也将允许两个程序在计算机之间进行通信(无需更改代码)。

为了阅读材料,这里是Python Socket Programming How To


3
投票

两种可能性:

  • 使用IP套接字。 Python文档中有some examples。 (如果只使用基本的读/写功能,实际上并不难。)另一方面,C语言中的套接字通常使用起来并不那么简单。

  • 创建第三个应用程序。它使用subprocess启动两个应用程序,并通过管道与两个应用程序通信。国际象棋应用程序必须只能读/写到stdin / stdout。

    这具有其他好处,该应用程序可以检查移动是否合法。这有助于您发现错误并保持游戏的公平。


2
投票

您可以将Protobuf用作程序间协议,并每旋转一圈从文件中读取/写入文件。

您可以每n秒读取一次中间文件。

一旦完成这项工作,您就可以使用套接字,每个程序将在该套接字上启动服务器并等待连接。

更改应该很小,因为协议已经是protobuf了。因此,您唯一需要更改的地方就是您从套接字或文件中读取的地方。

无论哪种情况,您都需要交换协议。

edit

糟糕,我看错了,我以为是C ++。

无论如何,这是对protobuf的C支持,但仍在进行中

http://code.google.com/p/protobuf-c/


0
投票

我会说,只写一个包含黑白移动的xml文件。在一个单独的文件中标记轮到谁,并确保只有轮到该程序的程序才会写入该文件以提交轮到他们。

这里是指向建议的xml格式的链接,用于存储另一个小组提出的动作http://www.xml.com/pub/a/2004/08/25/tourist.html


0
投票

具有客户机/服务器模型的套接字...

基本上,您和您的朋友正在创建客户端的不同实现。

[本地客户显示游戏的视觉表示,并存储棋子的状态(位置,被击杀/未击杀)以及关于棋子可以/不可以做的规则(可以移动哪些棋子的规则)以及是否检查板的状态)。

远程服务器存储有关玩家的状态(其轮到,获得的积分,是否赢得游戏的状态,以及已发生的动作的列表。

[您进行移动时,客户会根据游戏规则验证该移动,然后向服务器发送一条消息,说我已经完成了该移动。

另一个客户看到已经做出一个回合,从服务器拉出最后一个动作,计算是否在哪里进行了动作,根据游戏规则验证了该动作,并在本地重播了该动作。完成所有操作后,现在允许用户进行下一步操作(如果游戏结束,则不进行下一步操作)。

客户端/服务器游戏通信的最重要部分是,向服务器发送尽可能少的数据并在服务器上存储尽可能少的状态。这样,您可以在本地播放,也可以在世界各地播放,几乎没有延迟。只要您的客户端与对手的客户端在相同的规则下运行,一切都应该起作用。

[如果要确保没有人可以通过破解客户端的版本来作弊,则可以在服务器上完成位置和规则的计算,而仅使客户端具有简单的播放机制。

套接字是最佳通信介质的原因是:

  • 跨进程通信的限制几乎和跨节点通信一样困难
  • 网络在所有系统上都得到广泛支持
  • 如果您选择的话,很少或没有进入远程使用的障碍
  • 网络功能强大,灵活且经过验证

这就是为什么许多主要系统(如数据库)都将套接字用作网络以及本地通信介质的原因的一部分。


0
投票

如果两个应用程序都在同一台计算机上运行,​​请使用套接字并将您的对象序列化为jsun。否则,请使用Web服务以及jsun或xml。您可以找到两种语言的jsun和xml解析器。

© www.soinside.com 2019 - 2024. All rights reserved.