我使用IO :: Socket :: INET作爲客戶端程序(TCP Socket)與 (Infosys)Server進行通信。套接字:用' n'發送請求並且沒有' n'?
我的$襪子=新的IO ::插座:: INET(PeerAddr => 'xxx.xxx.xxx.xxx', PeerPort => '5000', 原=> 'TCP', ) ;
$Sent_Message = $MAIN::REQUEST_NO . $Bitmap .$main::Req_String ;
$Total_Len = sprintf("%04d",length($Sent_Message)) ;
#my $FinalMessage = $Total_Len . $Sent_Message."\n" ;
my $FinalMessage = $Total_Len . $Sent_Message ;
print $SOCK $FinalMessage;
我送用 「\ n」 個在該行的結束請求。我沒有收到回覆。 在服務器端,日誌說響應被髮送到客戶端。
使用wireshark和tcpdump我正在檢查數據包,我的系統沒有收到任何 數據包。
我發送了沒有'\ n'的請求,我收到了響應(立即)成功。
然後我又發送了3個請求,第一個是'\ n'第二個,第三個是'\ n'。
所有3個請求正在等待來自服務器的響應。我已經殺死了這個進程,1女巫是 發送請求'\ n'。之後,另外2個進程收到響應。
相同的客戶端代碼發送請求到我的本地服務器沒有'\ n'。
請求未收到服務器。 (緩衝區未刷新)。
我的疑問是發送請求與'\ n'和出去 '\ n'之間有什麼區別?
爲什麼其他2進程沒有立即收到響應。 (這是發送請求 沒有'\ n')?
我發現問題是在行尾以'\ n'發送請求。
問題出現在服務器端還是客戶端?
你能告訴你發送消息的地方嗎?另外,你的平臺是什麼? – perreal 2013-03-19 08:09:52
$ Sent_Message = $ MAIN :: REQUEST_NO。 $ Bitmap。$ main :: Req_String; $ Total_Len = sprintf(「%04d」,length($ Sent_Message)); #my $ FinalMessage = $ Total_Len。 $ Sent_Message。「\ n」; my $ FinalMessage = $ Total_Len。$ Sent_Message;打印$ SOCK $ FinalMessage; – ungalnanban 2013-03-19 08:11:55
我使用Perl,操作系統是Debian 6.0.6 – ungalnanban 2013-03-19 08:13:17