2013-07-10 54 views
0

我想寫一個小硬件模擬器,從套接字讀取輸入並將響應寫回。我想爲網絡部分使用ncat,爲邏輯使用Perl。但是當我用ncat運行我的perl腳本時,它永遠不會發送響應。爲什麼ncat -exec使用shell腳本而不使用perl腳本?

首先,這顯示了我想如何使用ncat。出於演示目的,我使用/ bin/cat,因爲它很簡單。

啓動服務器ncat -l 1234 -keep-open --exec "/bin/cat"

啓動客戶端ncat 12.34.56.789 1234

這樣做會導致NCAT回顯命令,好像我的期望。但是,當我嘗試在Perl中寫入cat並使用它而不是/ bin/cat時。

#!/usr/bin/perl 
while (<>) { 
    print $_; 
} 

ncat -l 1234 -keep-open --exec "/path/cat.pl" 

NCAT從未將響應返回給客戶端。即使從命令行它確實是/ bin/cat所做的。另外,當我用ncat而不是/ bin/cat使用下面的bash腳本時,它就像/ bin/cat一樣工作。 ncat像我期望的那樣迴應客戶的迴應。

#!/bin/bash 
while [ true ] 
do 
read lin 
echo "$lin" 
done 

我該如何讓我的Perl腳本以我想要的方式工作?

回答

4

是否停止標準輸出的緩衝(自動刷新)幫助?添加以下在Perl的貓開始:

$| = 1; 

您可以選擇與select STDOUT;此之前,如果你的代碼做了什麼之前質樸,但對於你的第3行的測試腳本這是沒有必要的。

+0

謝謝。這解決了問題。我想我不知道Perl和我應該如何。 – GMK