我正在使用perl脚本来模拟一个带有GPS接收器的temrinal,通过UDP套接字将特定格式的数据发送到地理服务器。
The data format is :
Message Type : 3 bits
Hours modulo 2 : 1bit
Minutes : 6 bits
misc flags I : 3 bits
Norh/South flag : 1 bit
Lattitude : 23 bits
East/West flag : 1 bit
Longitude : 25 bits
Misc flags II (constant values) : (4 + 4 +8)16 bits
Total is 88 bits
使用打包/解包功能我设法构建了一个88位长的“1”和“0”序列(我猜它叫做位图?)。
my $packet = pack("b3 b1 b6 b6 b4 b3 b1 b23 b1 b24 S",0,$Hour,$Minute,$Second,$Ignit,4,$ns,$lat,$ew,$lon,64);
使用以下代码我打印88位长的序列:
print (unpack("b88",$packet)."\n");
然后,当我使用下面的代码发送它时,它发送一个UDP数据包,其有效载荷为16字节长,因此在原始比特序列中添加了5个字节。
my $MAXLEN = 1024;
my $PORTNO = 50000;
my $TIMEOUT = 5;
my $server_host = "10.1.1.3";
my $sock = IO::Socket::INET->new(Proto => 'udp',
PeerPort => $PORTNO,
PeerAddr => $server_host)
or die "Creating socket: $!\n";
binmode($sock,raw);
$sock->send($packet);
我的代码涉及socket有什么问题?
此致 托马斯