IpMessenger에서 사활 감시와 메시지 발송 클라이언트를 만들었습니다 (php)

7559 단어 socketPHPipmessenger
소켓의 첫 프로그래밍이다.수정을 원하다.

Socket 형식


참조IP Messenger 프로토콜 의사록

  • (이 PC는 알고 있음) IPMessenger를 사용하는 클라이언트 목록 조회
  • 1:100:username:pcname:18:0

  • 메시지 보내기hello_world
  • 1:100:username:pcname:32:hello_world
  • 프로세스 처리

  • udp://target_ipport 2425의 socket 생성
  • target_ip의 IpMessenger에usename,pcname,targetIP에서 알고 싶은 클라이언트 일람표래요.
  • target_ip씨한테 고객 일람표를 받았어요. 그냥 사활을 감시하고 싶어서 한 바이트만 가져가세요.
  • 발송 결과 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
  • 를 발송한다


    *192.168.100.68의 IPMessenger가 응답하지 않을 경우 ok를 192.168.100.67로 발송

    좋은 웹페이지 즐겨찾기