java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信

标签 java c sockets ipc

我需要将数据从一个进程传输到另一个进程。
当这两个进程起源于 C 代码时,我对这个主题非常熟悉——我没有一次使用 C 代码中的文件、信号和管道来完成它,但我从来没有尝试在一个起源的两个进程之间做这件事来自 Java 代码,另一个来自 C 代码。

由于上述所有方法都需要 (Linux) native API,并且 JVM 即将推出,我决定使用套接字在这两个进程之间进行通信,我有几个问题:

  1. 使用套接字在同一台机器上的两个进程之间进行通信有多普遍?
  2. 没有指定“服务器”和“客户端”这一事实是否会设置任何障碍(实现方面)?

我问的原因是,无论我在哪里阅读在线内容,总有一个进程被定义为“服务器”,一个被定义为“客户端”。我的情况并非如此。另外,我从未尝试为此目的使用套接字。

最佳答案

  1. How common is it to use socket to communicate between two processes on the same machine?

某类交互模式很常见:当两个独立启动的程序需要双向通信 channel 时。您不能轻易地为此使用管道(“独立启动”干扰)。你可以使用 FIFO,但你需要两个,需要有人来设置它们,还有其他一些问题。

  1. Does the fact that there is no designated "Server" and "Client" can set any obstacles (implementation-wise)?

“客户端”与“服务器”之间的区别首先在于建立通信中的角色:服务器设置通信接口(interface)并等待一个或多个客户端打开与其的连接。作为“服务器”并不一定意味着支持多个客户端(既不是并发的也不是连续的),也不一定意味着在建立套接字连接后通过套接字连接进行通信。如果您使用套接字,那么您确实有客户端和服务器,但是如果您没有其他方法来指定哪个进程应该具有哪个角色,那么您可以任意选择。

Java 套接字的一个技巧是,尽管 Java 标准库支持它们,但它仅支持网络 套接字,而不支持 UNIX 域套接字。后者更常用于 UNIX 和 Linux 应用程序中,在这些应用程序中,通信本质上仅限于在同一台机器上运行的进程,但监听(仅)环回接口(interface)的网络套接字也可以达到这一目的。

在现代系统上,本地 TCP 连接与 UNIX 域套接字一样快,因此使用它们不是问题。

关于java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921255/

相关文章:

c - Delphi-to-C dll : Passing Arrays

c - 检测 ASCII 到整数转换中的整数溢出

c++ - 管理 2 个 Internet 连接?

java - 将信息从 java 传递到 c++ 的最佳方式是什么?

java - 如何告诉我的开发 servlet 容器使用代理进行 http 调用?

java - 在扩展类上添加 'throws' ?

c - 段错误 - 字符串 split

node.js - Node (套接字)实时音频流/广播

Java Collection - 基于字典/树的抽象数据结构的具体数据结构

JavaFX - 获取当前在 TextArea 中输入的单词