自从提出这个问题以来已经有一段时间了,3 年多,但与仍然有这样的寻呼机系统的医院客户有同样的问题,还说我们已经给了你 ip 和端口让它工作。
使用 php 打开到服务器和端口的套接字连接。然后发送所需的 TAP 命令并从服务器获取响应。
我的目标服务器不需要用户名或密码即可登录,而不是读取响应并循环等待它们,这可以通过 socket_read($socket, 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);
};