2016-04-27 18 views
0

私はシェルプログラミングには新しく、私のサーバーへの接続を開くスクリプトを作成しました。私は、このスクリプトがクライアントノードからの入力を待ち受け、それを使って関数を実行させたいと思っています。shスクリプトの関数呼び出しのためのnetcatデーモン

これは私のプロセスです。 >接続するための第2のコンピュータ利用のnetcat上>リスナーを開く 実行スクリプト>私は「4444」

ファイル名にコード化されたSERVER_PORTいるnodefunction

と呼ばれるサーバー上のスクリプトで関数を実行します。run_hangman

nc -l -k -v -p 4444 | bash hangman 

ファイル名:絞首刑執行人

#!/bin/bash 

msg_timeout=0 
host_ows=1 
server_port=4444 
dubOws=xxx.xxx.xxx.xxx 

initServer() { 
    hostIP=`ip -o addr show dev "eth0" | awk '$3 == "inet" {print $4}' | sed -r 's!/.*!!; s!.*\.!!'` 
    hostOws=`echo $hostIP | cut -d . -f 4` 
} 
servermsg(){ #message //if = --n, echos on same line 
    if [ "$1" != "--n" ] 
    then 
     echo `date +"%T"` "[SERVER] "$1 
    else 
     echo -n `date +"%T"` "[SERVER] " 
    fi 
} 
owsmsg(){ #message //if = --n, echos on same line 
    if [ "$1" != "--n" ] 
    then 
     echo `date +"%T"` "[OWS] "$1 
    else 
     echo -n `date +"%T"` "[OWS] " 
    fi 
} 
playermsg() { 
    if [ "$1" != "--n" ] 
    then 
     echo `date +"%T"` "[PLAYER] "$1 
    else 
     echo -n `date +"%T"` "[PLAYER] " 
    fi 
} 
question(){ #question, read, example 
    servermsg "$1" 
    if [ -n "$3" ] 
    then 
     servermsg "$3" 
    fi 
    read $2 
    echo "" 
} 
owsArray(){ # 
    for targetOws in $player_list 
    do 
     owsArray+=("OWS"$targetOws) 
    done 
    echo -n ${owsArray[*]} 
    echo 
} 
openSocket() { 
    servermsg "Starting the Game Listener" 
    servermsg "Opening Listener on port "$server_port 
    #nc -k -l $server_port |bash  
    #nc -kl -q 1 -p $server_port # This should create the listener & This is where everything stops. 
    servermsg "Now listening on port "$server_port 
} 

initServer 
owsmsg "Starting server on OWS"$hostOws"..." 

question "Enter all the OWSs that will play:" player_list "Example: 1 9 14 23" 
echo $player_list 
question "Type a category hint:" game_cat "Example: Type of Animal" 
question "Type your word:" game_word "Example: zebra" 
question "How many guesses:" game_guesses "Example: 7" 

servermsg "OWS"$host_ows "has created a Hangman session" 
servermsg "Players are:"; servermsg --n; owsArray 
servermsg "Your word is "${#game_word}" letters long and players have "$game_guesses" guesses" 
question "If this is all correct press enter, or CTRL+C to cancel" 

openSocket 

# I think I need a While script here to read the RAW input and run the playermsg function with the input? 

私はrun_hangmanファイルを実行して、私は自分のノードコンピュータを経由して、それに接続します。私は次の行を入力して、 "1 2 3"をエコーし​​ます。なぜなら、それが私の必要なものだからです。また、 "run_hangman"を実行しているウィンドウに "1 2 3"を直接入力することはできません。入力を押すと、新しい行に移動します。

echo "1 2 3" >/dev/tcp/xxx.xxx.xxx.xxx/4444 

サーバは、それはそれは私が1つの以上のエコーを送信することができますし、それがサーバー上で閉じopenSocketことを得るたら、それは今

Listening on [0.0.0.0] (family 0, port 4444) 
14:52:24 [OWS] Starting server on OWS225... 
14:52:24 [SERVER] Enter all the OWSs that will play: 
14:52:24 [SERVER] Example: 1 9 14 23 
Connection from [xxx.xxx.xxx.xxx] port 4444 [tcp/*] accepted (family 2, sport 41564) 
Connection closed, listening again. 

1 2 3 

を接続することを示しています。私は、私が想定していることをwhile文で取得し、 "playermsg 'がゲームを開始したような入力を聞いて、実際にサーバー上でその関数を実行させる必要があります。

私はこれを実行することができますか、ほとんどバックグラウンドにあるように思われますか?私はnc(1)を参照のために使っていて、いくつかのウェブサイトは-dを試してみると言いましたが、どちらもうまくいきませんでした。

答えて

0

私はそれを理解しました。私は本当に声明が必要でした。

openSocket 
while read -r value; do 
    val=${value:10} 
    if [[ "$value" == playermsg* ]]; then 
     val=${value:10} 
     playermsg $val 
    elif [[ "$value" == servermsg* ]]; then 
     val=${value:10} 
     servermsg $val 
    else 
     echo "Returned "$value 
     echo "Value was "$val 
    fi 
done 

は、だから今2台目のコンピュータで、私は単に

echo "playermsg testing" >/dev/tcp/xxx.xxx.xxx.xxx/4444 

を実行し、サーバは次の項目が表示されます

15:29:36 [SERVER] Starting the Game Listener 
15:29:36 [SERVER] Opening Listener on port 4440 
15:29:36 [SERVER] Now listening on port 4440 
15:29:37 [PLAYER] testing 
関連する問題