是否可以将文件用作两个远程进程("文件套接字")之间的双向通信通道?

Gab*_*ier 6 sockets file-io

这是场景:

  • 用户可以访问两台计算机

  • 由于防火墙限制,这些计算机无法与网络套接字通信

  • 但是,两者都可以访问具有第三台计算机上的读/写权限的公共网络共享

我的问题是:是否可以编写在两台机器上执行的小应用程序,允许通过仅使用网络共享上的文件在两者之间建立通信通道?理想情况下,它会模拟流和套接字行为.

我想是这样的:

1)它将涉及两个用于通信的文件,每个方向一个

2)并且有可能在另一个进程正在通过网络写入文件时读取文件.

但我不确定它是否可行,主要是因为我怀疑第2点.但是,在使用NFS的类似Unix的环境中也许是可能的.

可能吗?它已经存在吗?

ern*_*rn0 2

我认为首先将流分成数据包是个好主意。然后这些数据包应该作为文件出现在公共目录中。两种方式(a->b 和 b->a)必须有两个“命名空间”。为了方便调试,文件名应该包含时间戳,而不仅仅是增量部分。

文件只有一个问题:即使文件非常小,接收器也可以在文件未完全刷新时捕获它,我的意思是文件仅准备就绪(常见情况:0 字节长),或者在文件传输期间发生网络错误。转移。为避免这种情况,发件人应:

  • 以临时名称创建文件,
  • 写入内容,关闭它,
  • 然后将其重命名为最终名称(带有时间戳等)。

因此,接收者只有在 100% 确定文件已完全写入时才会选择重命名后的文件。

在发送新文件之前,发送者可能会检查临时文件,如果存在,则意味着上次传输被中止。

创建新的传输文件时,发送方应创建一个信息文件,其中包含有关正在发送的传输数据包的信息,因此在中止时,它将包含有关失败数据包的信息。也许,唯一的信息是传输时间(记住:临时文件名不包含时间戳),但总比没有好。