最简单的脚本缓慢通过套接字连接发送数据的方法

时间:2011-01-23 10:17:46

标签: linux sockets scripting tcp

我需要定期从Linux客户端连接到服务器并发送一些命令,所以我写了这个脚本:

#!/bin/sh
telnet theserver.somewhere.com 9999 <<EOF
command 1
command 2
command 3
EOF

问题是我需要在命令之间等待。此脚本发送命令并断开连接,服务器检测到这些命令并断开连接,并删除命令。如果我从命令行打开连接然后一次粘贴一个命令,它就可以工作,它可以从非本地客户端运行,但是从本地客户端运行脚本失败。只需在每个命令之间暂停一秒钟即可。

我可以编写一个执行此操作的C或Java程序,但最简单的方法是什么?如果需要,可以使用通常的脚本语言(Perl和Python)。

5 个答案:

答案 0 :(得分:3)

Shell命令一次回显一行从文件到telnet:

cat commands.txt | 
    ( while read line; do echo $line; sleep 1; done ) |
    telnet theserver.somewhere.com 9999

答案 1 :(得分:2)

首先,如果服务器代码在你的控制之下,那么我建议你在服务器中修复这个问题,因为没有实际的理由为什么'关闭连接太快'会有问题。

然后,我会写一个简单的python脚本:

#!/bin/python

import socket,time

s=socket.socket(socket.AF_INET)
s.connect(("theserver.somewhere.com",9999))
s.sendall("1")
time.sleep(1)
s.sendall("2")
time.sleep(1)
s.close()

答案 2 :(得分:1)

set s [socket $HOST $PORT]
fconfigure $s -buffering line
puts $s $command1
sleep $no_of_sec
puts $s $command2

我的TCL有点生疏,但我认为这是最简单的方法。你也可以使用一些Tk来创造奇迹。 http://www.tcl.tk/man/tcl/tutorial/tcltutorial.html

答案 3 :(得分:0)

您是否尝试过使用“睡眠”命令?我不确定这是否会起作用,因为它可能会尝试在另一台服务器上发出该命令但是值得一试只是发出类似睡眠2的东西来暂停一秒钟。

答案 4 :(得分:0)

这是Expect旨在解决的问题。

http://expect.sourceforge.net/

相关问题