在同一台机器上的两个进程(源于c和java)之间进行通信的套接字

1bqhqjot  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(330)

我需要将数据从一个进程传输到另一个进程。
我对这两个进程起源于c代码时的主题非常熟悉——我从来没有在c代码中使用过文件、信号和管道来完成它,但我从来没有尝试过在两个进程之间完成它,其中一个来自java代码,另一个来自c代码。
由于以上所有方法都需要(linux)本机api,并且jvm正在进行中,因此我决定使用套接字在这两个进程之间进行通信,我有几个问题:
使用套接字在同一台机器上的两个进程之间进行通信有多常见?
没有指定的“服务器”和“客户机”这一事实是否会设置任何障碍(实现方面)?
我之所以这么问,是因为我在网上看到的每一个地方,总有一个进程被定义为“服务器”,一个进程被定义为“客户端”。我的情况不是这样。另外,我从来没有试过用这个插座。

vbkedwbf

vbkedwbf1#

使用套接字在同一台机器上的两个进程之间进行通信有多常见?
对于某类交互模式来说,这是很常见的:当两个独立启动的程序需要一个双向通信通道时。您不能轻易地使用管道来实现这一点(“独立启动”干涉)。你可以使用先进先出,但你需要两个,有人需要设置他们,还有其他的怪癖。
没有指定的“服务器”和“客户机”这一事实是否会设置任何障碍(实现方面)?
“客户机”和“服务器”之间的区别首先是关于建立通信中的角色:服务器设置通信接口并等待一个或多个客户机打开与它的连接。作为“服务器”并不一定意味着支持多个客户机(既不是并发的,也不是串行的),也不一定意味着在建立套接字连接之后通过套接字连接进行通信。如果您使用套接字,那么您确实有客户机和服务器,但是如果您没有其他方法来指定哪个进程应该有哪个角色,那么您可以任意选择。
java中套接字的一个技巧是,尽管java标准库支持它们,但它只支持网络套接字,而不支持unix域套接字。后者更常用于unix和linux应用程序中,在unix和linux应用程序中,通信本质上仅限于在同一台机器上运行的进程,但是监听(仅)环回接口的网络套接字也可以用于此目的。
在现代系统中,本地tcp连接与unix域套接字一样快,因此使用它们不是问题。

bqf10yzr

bqf10yzr2#

以语言和平台无关的方式将两个进程连接在一起可以很容易地通过 Socket . 所有语言和平台都支持它,如果需要,可以很容易地用另一种方法替换它。
根据您的解释,我推断java进程就是服务器。 Sockets 完全没有风险,因为它们不需要特殊权限(至少对于1024以上的端口)或任何其他特殊处理。
在设计进程将要通过的(应用程序级)协议时,请注意。

amrnrhlw

amrnrhlw3#

您可能需要使用java本机接口。这可能正是你想要的。-根据你的建议在两个程序上使用套接字。
您可能需要查看linux上的共享内存。
但是:一般来说,使用套接字并不是一件坏事,但我怀疑这是一种常见的做法。

  • 我缺乏证据证明这不是常见的做法。

相关问题