2012-11-15 38 views
2

我很新的shell腳本,我的問題是我真的不知道如何使我的套接字連接活着。 我不確定我寫的腳本是否正在做它應該做的事。Shellscript發送消息到套接字並保持連接活着

我試圖做的是,我相信我會創建140個套接字並向這些套接字發送消息,並且希望這些套接字連接保持活動狀態。

for ((i=0; i<140; i++)) 
do 
echo "Message" > /dev/tcp/187.98.06.01/4599 
done 

有一個服務器,我發這條短信,我也得到客戶端建立連接在服務器端的日誌信息,但是當我檢查插座連接的數量,數量爲0。我我不確定是否因爲套接字連接關閉。

我需要保持套接字連接活着。 任何人都可以提供上述代碼的建議或修復。

回答

2

我使用GNU bash,版本3.2.25(1) - 釋放(x86_64-redhat-linux-gnu)。

這並不十分安全不是非常便攜,但你應該能夠編寫:

# Open 140 TCP connections to port 4599 on 187.98.06.01, using 
# file-descriptors 60 through 199: 
for ((i = 0 ; i < 140 ; i++)) ; do 
    fd=$((i + 60)) 
    eval exec "$fd<>/dev/tcp/187.98.06.01/4599" 
    echo Message >&$fd 
done 

# ... do whatever you want with these 140 connections ... 

# Close the connections: 
for ((i = 0 ; i < 140 ; i++)) ; do 
    fd=$((i + 60)) 
    eval exec "$fd<&-" "$fd>&-" 
done 

(它不是便攜式的原因是,它取決於AREN bash特性並不是所有的shell都共享它,它不安全的原因是shell使用文件描述符作爲自己內部的東西,例如打開腳本和搜索目錄。描述符0到9 — STDIN,STDOUT,STDERR和另外七個—供你使用,但德腳本10以及更高的風險與shell正在做的衝突。在Bash 4.x中有一個特性,可以讓你爲重定向提供一個變量名稱,並讓Bash決定使用什麼文件描述符,但Bash 3.x沒有這個功能。)