socat TCP文件服务器

我试图build立一个简单的社会文件服务器使用TCP发送小文件(〜100KB)。

以下是一个文件的单行服务器和客户端:

服务器: socat -u -d -d OPEN:file.dat TCP-LISTEN:<port>,reuseaddr,fork

客户端: socat -u -d -d TCP:<server>:<port> OPEN:file.dat,creat

第一次数据传输始终有效,但以下情况并不总是有效。 大多数以下传输在客户端上创build一个空文件。 这个问题在多个客户端传输一次后依然存在,我非常希望数据在发生错误时不会被传输,但是日志和返回值并不表示任何错误,只是一个较短的数据循环。

我尝试了几乎所有在这里提到的选项: http : //www.dest-unreach.org/socat/doc/socat.html

我发现让它连续工作的唯一方法是从服务器侦听器中删除fork选项,并将整个commande行包装在一个bash循环中,但是当然对于多个客户端来说它是失败的。

我尝试了Ubuntu,Fedora,Redhat和FreeBSD。

我错过了什么或者这是一个错误?

我有同样的问题,花了我几个小时来弄清楚我做错了什么。 我仍然不知道,但我至less知道如何使它工作。 我正在使用:

socat -u FILE:/tmp/test.txt TCP-LISTEN:5778,reuseaddr,fork

当我切换到以下时,它按预期工作:

socat TCP-LISTEN:5778,reuseaddr,fork FILE:/tmp/test.txt

我不确定实际上有什么变化,但是删除-u标志并交换地址顺序将打开多个客户端调用的套接字。 我试图复制一个已知的服务器的工作示例时,偶然发现了它。

另外我的客户只是socat -u TCP:localhost:5778 STDOUT 。 它没有-u工作。