2012-02-06 120 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); 
};