我在linux机器上运行了一个远程音乐播放器守护程序(MPD)服务器。我有一个客户端在另一台Linux机器上监听这个流。
当要求MPD服务器暂停或停止流时,它会断开TCP端口上连接的所有客户端。因此,当服务器再次开始流式传输时,必须手动重新连接客户端。
我想编写一个程序来监视接受连接的服务器的TCP端口,然后自动重启客户端。我能在循环中运行 connect()和 sleep()做得更好吗?是否有任何命令行实用程序来执行此操作?
我可以在运行MPD服务器的机器上运行客户端,如果有帮助的话。以下将告诉我进程是否正在侦听本地端口,但是如果进程没有阻塞它们就不会阻塞,所以我仍然需要将它们包装在一个循环中。
$ sudo fuser -n tcp 8000
8000 / tcp:9677$ sudo netstat -nlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 9677 / mpd
我可以尝试任何不涉及更改MPD服务器行为的解决方案。
答案 0 :(得分:3)
总是有可能编写代理MPD的中继服务器。
它坐在那里为您的客户倾听不同的端口,并代替他们与MPD建立联系。当MPD断开连接时,继电器只会尝试每隔几秒重新连接一次,而不会断开其客户端。
答案 1 :(得分:2)
你走了:
echo -n "" | nc -q 0 localhost 8000 && echo "made a connection" || echo "server was down"
echo -n ""
立即将一个EOF放在stdin上;在stdin上看到EOF后立即返回nc -q 0
。 nc(netcat)尝试在端口8000上建立与localhost的连接。如果连接成功,则返回成功的错误代码,并回显“建立连接”;否则,如果连接被拒绝,我们回应“服务器已关闭”。
如果你想测试它,那么在另一个终端运行
nc -lvvp 8000
将在端口8000上启动netcat侦听实例,并输出详细信息。在您的其他终端中,运行第一个命令。第一次运行它,它会说连接。然后服务器/监听器将关闭,因此下次运行时,它会说服务器已关闭。