Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一台机器上的两个进程(源于C和Java)之间进行通信的套接字_Java_C_Sockets_Ipc - Fatal编程技术网

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

在同一台机器上的两个进程(源于C和Java)之间进行通信的套接字,java,c,sockets,ipc,Java,C,Sockets,Ipc,我需要将数据从一个进程传输到另一个进程。 当这两个进程起源于C代码时,我对这个主题非常熟悉——我从未在C代码中使用过文件、信号和管道来完成它,但我从未尝试在两个进程之间完成它,一个来自Java代码,另一个来自C代码 由于以上所有方法都需要(Linux)本机API,并且JVM正在开发中,因此我决定使用套接字在这两个进程之间进行通信,我有几个问题: 使用套接字在同一台机器上的两个进程之间进行通信有多普遍 没有指定的“服务器”和“客户端”这一事实是否会设置任何障碍(实现方面) 我之所以这么问,是因为我

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

由于以上所有方法都需要(Linux)本机API,并且JVM正在开发中,因此我决定使用套接字在这两个进程之间进行通信,我有几个问题:

  • 使用套接字在同一台机器上的两个进程之间进行通信有多普遍
  • 没有指定的“服务器”和“客户端”这一事实是否会设置任何障碍(实现方面) 我之所以这么问,是因为我在网上看到的每一个地方,都有一个进程被定义为“服务器”,一个进程被定义为“客户端”。我的情况并非如此。另外,我从来没有尝试过使用插座来达到这个目的

  • 您可能需要使用。这可能正是你想要的根据您的建议,在两个程序上使用套接字

  • 您可能希望查看linux上的共享内存

  • 但是:一般来说,使用套接字在这里不是一件坏事,但我怀疑这是一种常见做法*

    *我缺乏证据,证明这不是常见的做法

  • 您可能需要使用。这可能正是你想要的根据您的建议,在两个程序上使用套接字

  • 您可能希望查看linux上的共享内存

  • 但是:一般来说,使用套接字在这里不是一件坏事,但我怀疑这是一种常见做法*


    *我缺乏证据,这不是常见的做法,因为使用
    套接字可以很容易地以一种与语言和平台无关的方式将两个进程连接在一起。它受所有语言和平台的支持,如果需要,可以很容易地用另一种方法替换


    根据您的解释,我推断Java进程就是服务器<代码>套接字
    完全没有风险,因为它们不需要特殊权限(至少对于1024以上的端口)或任何其他特殊处理


    在设计进程将要通过的(应用程序级)协议时,请注意。

    使用
    套接字可以轻松实现以语言和平台无关的方式将两个进程连接在一起。它受所有语言和平台的支持,如果需要,可以很容易地用另一种方法替换


    根据您的解释,我推断Java进程就是服务器<代码>套接字
    完全没有风险,因为它们不需要特殊权限(至少对于1024以上的端口)或任何其他特殊处理

    在设计流程将通过的(应用程序级)协议时,请注意

  • 使用套接字在同一台机器上的两个进程之间进行通信有多普遍
  • 对于某种类型的交互模式来说,这是很常见的:当两个独立启动的程序需要双向通信通道时。您不能轻松地使用管道来实现这一点(“独立启动”干扰)。您可以使用FIFO,但您需要两个FIFO,需要有人设置FIFO,还有其他一些怪癖

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

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

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

  • 使用套接字在同一台机器上的两个进程之间进行通信有多普遍
  • 对于某种类型的交互模式来说,这是很常见的:当两个独立启动的程序需要双向通信通道时。您不能轻松地使用管道来实现这一点(“独立启动”干扰)。您可以使用FIFO,但您需要两个FIFO,需要有人设置FIFO,还有其他一些怪癖

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

    Java中套接字的一个技巧是,尽管Java标准库