Shell-Script

如何保持 netcat 連接打開?

  • February 27, 2022

我有兩個文件,client.shserver.sh. 所有必要的數據都在伺服器上,使用netcat發送到客戶端。客戶端只是獲取這些數據並將其顯示給最終使用者。問題是,當我嘗試將對話框載入螢幕從伺服器顯示到客戶端時:

server.sh

# CLIENT PORT: 8765
# SERVER PORT: 5678

while :
do
   touch registered_users data

   nc -vv -l -p 5678 > data

   case `cat data` in
       "SPLASH_SCREEN")
           for ((i=0;i<100;i++))
           do
               echo $i
           done | dialog --title 'Loading...' --gauge 'Welcome!' 8 40 0 > /dev/tcp/127.0.0.1/8765
       ;;
   esac
done

client.sh

# CLIENT PORT: 8765
# SERVER PORT: 5678

echo "SPLASH_SCREEN" > /dev/tcp/127.0.0.1/5678

while :
do
   nc -l -p 8765 > server_response
   cat server_response
done

解決了!只需要使用 -k 選項

-k    Forces nc to stay listening for another connection after its current
      connection is completed.  It is an error to use this option without the
      -l option.

**編輯:**此答案假定您正在使用openbsd-netcat,某些版本(例如,某些版本gnu-netcat的功能集有所減少,因此可能不存在某些標誌,例如-k,包名稱可能會根據您的發行版而有所不同

引用自:https://unix.stackexchange.com/questions/423407