2011-01-23 4 views
0

мне нужно периодически подключаться к серверу от клиента Linux и отправить несколько команд, так что я написал этот сценарий:Простейший способ скрипта медленно отправки данных через сокет-соединение

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

Проблема заключается в том, что мне нужно для ожидания команд. Этот скрипт отправляет команды и отключает слишком быстро, что обнаруживает сервер, и отбрасывает команды. Он работает, если я открою соединение из командной строки, а затем вставлю команды по одному, и он работает от нелокальных клиентов, но от локальных клиентов сбой сценария. Достаточно просто приостановить секунду или около того между каждой командой.

Я могу написать программу на C или Java, которая делает это, но что является самым простым способом? Обычные языки сценариев (Perl и Python) доступны, если они вам нужны.

ответ

3

Shell команды эхо линии в то время из файла телнет:

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

Спасибо! Очень короткий скрипт и использует только командные и стандартные команды. Если бы я еще не использовал скрипт Python от RoeeK, я бы использовал этот. –

0

Вы пытались использовать команду «Сон»? Я не уверен, будет ли это работать, поскольку это может попытаться выпустить эту команду на другом сервере, но стоит сделать что-то вроде sleep 2 для паузы за секунды.

+0

не удается бежать в командный режим в телнет. Он работает при наборе вручную, но по какой-то причине не в скрипте. Любые намеки? –

2

Прежде всего, если код сервера находится в вашем элементе управления, я предлагаю устранить эту проблему на сервере, потому что нет реальной причины, по которой «слишком быстрое закрытие соединения» будет иметь проблему.

тогда, я бы написать небольшой и простой питон скрипт:

#!/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() 
+0

Это работает, достаточно просто, и я использую его сейчас. Благодаря! –

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

+0

Спасибо за это тоже. –