2016-12-13 13 views
1

私はTCPパケットをホストに送り、応答を得ようとしており、明らかに何か正しいことをしていません。Perl TCPソケット通信

私は多くの投稿や私のPerl Cookbookと比較して、どこが間違っているのか分かりません。非常に単純に以下しよう:

use strict; 
use warnings; 
use IO::Socket::INET; 
$| = 1; 
my $socket = new IO::Socket::INET (
    PeerHost => '<the_host_name>', 
    PeerPort => '33792', 
    Proto => 'tcp' 
); 
unless($socket) { 
    print "couldn't connect to the server\n"; 
} 
# data to send to a server 
my $req = <<SBCEND; 
START 
AUTOLOGUE CENTRAL 
TYPE|QUOTE| 
H|1|1.0|Regular|CANCEL|6072|TESTDT|JOHNAIX| | |26000|DEMO| | | | | | | | |0 
P|1|HAS|LF115|HAS|LF115|10| | | | | | | | | | | | | | | 
P|2|WIX|51515|WIX|51515|24| | | | | | | | | | | | | | | 
P|3|FRA|PH8A|FRA|PH8A|2| | | | | | | | | | | | | | | 
END 
SBCEND 
my $message = "\002".$req."\003"; 
my $size = $socket->send($message); 
shutdown($socket, 1); 
my $response = ""; 
$socket->recv($response, 1024); 
$socket->close(); 
print "sent: $size\n$req\n"; 
print "received response: $response\n"; 

は、私はすべての応答がない、わからない私は、または何かが私の要求が間違っている場合にはなってる場合。

私は彼らのサポートに頼んでも、私が応答を得なければならないときは、リクエストが有効であれば、私はドキュメントから受け取るべき応答を送ってくれます。

上記のリクエストデータは、私に送信された例です。彼らは私の要求の始めにバイナリ2が必要だと言ってきました。

私がここで何か間違っているのか誰かから教えてもらえますか?

+1

'厳格を使用してください。あなたは何のエラーを出していますか? – AbhiNickz

+0

ああ、もちろん。最初の投稿はウェブ上のアイデアからハッキングされました。私は最初に何をしようとしていたのかを編集し、警告やエラーは表示されません。そして、応答がありません:( – rwfitzy

+0

コードはエラーなしで "終了"しますか?(おそらく 'recv'呼び出し時に)ブロックしますか? – Alnitak

答えて

0

は、私は、バイナリ2の後に新しい行を必要に応じて、このラインに小さな変更が判明:

my $message = "\002\r\n".$req."\003";