使用该设备:Gsm我可以读取在我的umts上接收到的短信.有时,由于一条短信长度的限制,一条消息被分成两条或多条短信。有没有办法找出一组短信是否是一条消息的一部分?例如,瓦木鞋我的短信,属于一起作为一个文本。
#!/usr/bin/perl
use warnings; use strict;
use Device::Gsm;
my $modem = new Device::Gsm( port => '/dev/ttyUSB0' );
if( $modem->connect() ) {
print "connected!\n";
}
else {
print "sorry, no connection with serial port!\n";
}
my @msg = $modem->messages;
if( @msg ) {
my $n = 0;
for( @msg ) {
my $sms = $_;
next unless defined $sms;
print "\nMESSAGE N. $n\n";
print 'Text [', $sms->text(), "]\n";
$n++;
}
}
else {
print "No message on SIM, or error during read!\n";
} 连接!
电文N. 0文字讯息1第1部分
电文N. 1文字讯息1第2部分
讯息N. 2文字讯息1第3部分
电文N. 3文本信息2
第4条短信第3条
发布于 2010-03-08 14:51:57
我不认为有一种方法与设备::Gsm直接。但是,如果以PDU模式读取消息(请参阅https://metacpan.org/pod/Device::Gsm#mode ),则可以适当地解释标头以读出多部分标志。
[编辑以添加:此引用是对SMS PDU头:http://www.spallared.com/old_nokia/nokia/smspdu/smspdu.htm的一个很好的概述]
发布于 2010-03-10 16:42:37
这主要起作用,但并非总是如此。
#!/usr/bin/perl
use warnings; use strict;
use 5.010;
binmode STDOUT, ':encoding(UTF-8)';
use Device::Gsm;
my $modem = new Device::Gsm( port => '/dev/ttyUSB0' );
if( $modem->connect() ) {
print "connected!\n";
} else {
print "sorry, no connection with serial port!\n";
}
my @msg = $modem->messages( 'ME' );
if( @msg ) {
print "You have messages!\n" ;
my $n = 0;
my $text;
for my $sms ( @msg ) {
next unless defined $sms;
$text .= $sms->text;
if ( $sms->{tokens}{PDUTYPE}{_MMS} ) {
say "\nMESSAGE N. $n";
say $text;
$text = '';
$n++;
<STDIN>;
}
}
} else {
print "No message or error during read!\n";
}https://stackoverflow.com/questions/2402085
复制相似问题