Прошло много времени с тех пор, как этот вопрос был задан, 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);
};