(Infosys) サーバーと通信するクライアント プログラム (TCP ソケット) に IO::Socket::INET を使用しています。
my $SOCK = new IO::Socket::INET ( PeerAddr => 'xxx.xxx.xxx.xxx' , PeerPort => '5000', Proto => '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 つの要求を送信しました。最初の 1 つは '\n' 付きで、2 番目は '\n' なしです。
3 つの要求はすべて、サーバーからの応答を待っています。プロセス 1 を強制終了しました。「\n」でリクエストが送信されました。その後、他の 2 つのプロセスが応答を受け取ります。
同じクライアント コードが、'\n' なしでローカル サーバーに要求を送信しています。
サーバーにリクエストが届きません。(バッファはフラッシュされません)。
私の疑問は、 '\n' を使用してリクエストを送信する場合と '\n' を使用しない場合の違いは何ですか?
他の 2 つのプロセスがすぐに応答を受信しなかった理由。(「\n」なしでリクエストが送信されます) ?
問題は、行末に「\n」を付けて送信するリクエストであることがわかりました。
問題はサーバー側ですか、それともクライアント側ですか?