2012-02-06 121 views
0

这不是“测试任何协议”,而是“Telocator字母数字协议”。寻呼协议,Telocator字母数字协议,“TAP”,通过TCP/IP?

我被一个供应商,它有一个IP地址和端口可用于发送一个“TAP消息”来告诉。

然而,供应商提供有关如何格式化这些消息没有其他文件,并简单地坚持了一遍又一遍,这是足够的信息。只是“发送TAP消息向IP端口” ......

有人可以提供这可能意味着什么,什么该消息的格式可能看起来像什么想法?不知道它是XML/ASCII/BINARY,通过HTTP(S)还是什么运行。

谢谢!

+0

我想你想找到一个新的供应商。没有文件,也没有支持让杰克成为一个生气的男孩 – BozoJoe 2015-03-11 00:29:03

回答

3

TAP是一个串行协议。您可以从http://www.phoner.de/TAP_V1P8.PDF下载pdf。它旨在通过PSTN(电话线)运行;您拨打网络提供商并上传您的短信和收件人号码,然后挂断。网络提供商然后发送消息。

说实话,这已经是一个过时的技术。在英国,O2在2012年3月底停止了其TAP服务,仅留下了沃达丰的服务(似乎还没有工作一段时间)。从我能收集到的情况来看,在其他国家也是类似的故事。您最好查看Clickgate等SMS网关服务,或通过电子邮件发送短信服务。在这个智能手机和推送电子邮件的时代,我怀疑纯电子邮件通知最终会接管。

1

它已经有一段时间这个问题有人问,3年+,但有有仍然有一个寻呼系统这样的医院客户非常相同的问题,也说我们已经给你的IP和端口,使其工作。

采用php打开一个套接字连接到服务器和端口。然后发送所需的TAP命令并从服务器获取响应。

我是针对不需要用户名或密码登录,而不是读的响应和循环等待他们的服务器,可以与socket_read($插座,1024)进行;在发送下一个命令之前,我暂停了脚本两秒钟。当我关闭套接字时服务器不喜欢它,并最终让服务器在发送消息序列结束后执行此操作。如果你省略了消息部分的结尾,你可以发送多条消息,但是我必须处理的服务器崩溃了很多,下面的代码对我有用。客户将在6个月的时间内购买新系统,而且间隔时间要好得多,因此不会再对此进行深入研究。

//$msg_to = the pager number 
//$msg_text = the message 
//$host = ip of server 
//$port = port number 

$message = chr(2).$msg_to.chr(13).$msg_text.chr(13).chr(3); 
$checksum = calcChecksum($message); 
$message .= $checksum.chr(13); 
$CR = chr(13); 
$end = chr(27).chr(4).chr(13); //<ESC><EOT><CR> 
$login = chr(27)."PG1".chr(13); //<ESC>PG1thepwd<CR> 
//- <ACK><CR><ESC>[p<CR> check for [p 

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket"); 
$result = socket_connect($socket, $host, $port) or die("Could not connect to server"); 
sleep(1); stream_set_timeout($socket, 5); 
socket_write($socket, $CR, strlen($CR)) or die("Could not send <CR> to server"); 
sleep(2); 
socket_write($socket, $message, strlen($message)) or die("Could not send message to server"); 
sleep(2); 
socket_write($socket, $end, strlen($end)) or die("Could not send end to server"); 

function calcChecksum($message) { 
$split = str_split($message); $sum = 0; 
foreach ($split as $value) { $numb = ord($value); $sum += $numb; } 
$d3 = 48 + $sum - intval($sum/16) * 16; 
$sum = intval($sum/16); 
$d2 = 48 + $sum - intval($sum/16) * 16; 
$sum = intval($sum/16); 
$d1 = 48 + $sum - intval($sum/16) * 16; 
return chr($d1).chr($d2).chr($d3); 
};