LoginSignup
8
10

More than 5 years have passed since last update.

IpMessenger死活監視とメッセージ送信クライアント作った(php)

Last updated at Posted at 2014-08-13

Socketプログラミングは初めて。添削希望。

socket形式

参考 IP Messenger プロトコルメモ.

  • (そのPCが知っている)IPMessengerを利用しているクライアント一覧を問い合わせ

    • 1:100:username:pcname:18:0
  • メッセージ文hello_worldを送信

    • 1:100:username:pcname:32:hello_world

処理の流れ

  1. udp://target_ip, port 2425のsocketを生成
  2. target_ipのIpMessengerに、username,pcnameを名乗り、target_ipさんが知っているクライアント一覧が欲しいと言う。
  3. target_ipさんからクライアント一覧をもらうが、死活監視がしたいだけなのでとりあえず1バイトだけもらっとく。
  4. 取得結果のok,ngを送信

IpMessengerクラス

ipmessenger.php
<?php
class IpMessenger {
  const IPMSG_GETLIST = '18';
  const IPMSG_SENDMESSAGE = '32';
  const STREAM_TIMEOUT = 3; //second

  private $target_ip;

  public function set_target_ip($ip) {
      $this->target_ip = $ip;
  }

  private function connect() {
      $fp = fsockopen('udp://'.$this->target_ip, 2425);
      stream_set_timeout($fp, self::STREAM_TIMEOUT);
      return $fp;
  }

  public function connect_check() {
      $fp = self::connect();
      fwrite($fp, "1:100:username:pcname:".self::IPMSG_GETLIST.":0");
      $data_length = 1;
      if(!fread($fp, $data_length)) {
          return false;
      }
      return true;
  }

  public function send_message($message_utf8) {
      $fp = self::connect();
      $message_sjis = mb_convert_encoding($message_utf8,"sjis","utf-8");
      fwrite($fp, "1:100:username:groupname:".self::IPMSG_SENDMESSAGE.":".$message_sjis);
  }
}

使い方

  • 192.168.100.45 : phpを実行する端末
  • 192.168.100.68 : チェックしたいIPMessengerの端末
  • 192.168.100.67 : 結果をIPMessengerで受け取る端末
main.php
<?php
require_once('ipmessenger.php');

$ipmsg = new IpMessenger();
$ipmsg->set_target_ip('192.168.100.68');
if($ipmsg->connect_check()) {
    $ipmsg->set_target_ip('192.168.100.67');
    $ipmsg->send_message("日本語でもOK");
} else {
    $ipmsg->set_target_ip('192.168.100.67');
    $ipmsg->send_message("ng");
}

実行

実行
php main.php
  • 192.168.100.68 の IPMessengerの応答があるとき、192.168.100.67 へokを送る

スクリーンショット 2014-08-13 16.02.34.png

* 192.168.100.68 の IPMessengerの応答がないとき、192.168.100.67 へokを送る

スクリーンショット 2014-08-13 16.02.18.png

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10