我试图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工作。