魔兽世界sf 怎样编写Apple Push Notification服务器 - ios专栏 - 博客频道 - CSDN.NETVisual C#中用WMI控制

许可证文件处于执行的PHP代码的当前工作冒险岛私服下,如果需要你可指定其绝对路径。



格式化为遵循 RFC 4627标准的JSON格式。它由以下几部分组成:

原生接口

{     "aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" },     "server" : { "serverId" : 1, "name" : "Server name")}


注意测试时应该使用开发许可证及sandbox,1.85炎龙元素。成品主机名为 gateway.push.apple.com ,而且你必须使用不同的产品许可证。

$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');$payload = json_encode($payload);



完成后,应关闭连接:

本教程将从代码的层面介绍关于怎样建立一个推送通知服务器以连接APNS并使用推送通知到我们的服务器监视魔域sf程序上。我们是使用PHP进行开发的,我们的示例都是PHP 5兼容的。


限制

    设备令牌

    256字节的限制适用于整个载荷,包括自定义字典集。


    $payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');$payload['server'] = array('serverId' => $serverId, 'name' => $name);$output = json_encode($payload);


    在Mac上生成 Apple推送通知SSL许可证:

    Apple提供了有关实现和处理设备上提示消息的,但它只包括消息提供者服务器端编程指南。

    反馈服务

    如Apple:

    作为消息提供者,我们需要与 Apple推送通知服务 (APNS)连接以发送消息到魔兽世界私服。为减少电池使用,一个设备仅需维持与APNS的一个连接。

    远程通知数据的流程是单向的。提供者将包括客户程序设备令牌和有效载荷的数据打包,发送到APNS,然后APNS再将通知发送给最终设备。

    每条推送消息都必须针对某特定设备。这是通过使用在你的完美国际私服程序中由APNS产生的唯一deviceToken(设备令牌)来实现的。一旦获取了此令牌,你需要将其存储于服务器而不是你的完美国际私服程序内。它看上去像这样:

    打开连接的PHP 5代码如下:

    {     "aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" }}





    载荷内容

    当用户按下“View”后,自定义server值将被传递到设备中的程序。JSON 值如下:

    许可证



    使用唯一的SSL许可证连接到APNS

    对于 Server Density 魔兽世界sf程序而言,让用户按下“View”直接进入产生此提示的服务器是很重要的,所以我们增加了额外的自定义值:

    Apple 还提供了一个,你应该定期查询。它提供了一个以前使用过但不再有效的(例如用户卸载了你的冒险岛私服程序)设备令牌列表。你可以从你的数据库中删除这些设备令牌,传奇世界私服

    注意 $deviceToken 是从数据库中提取并去除空格得到的。我们还应该检查是否$payload超过256个字节。

    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) .chr(strlen($payload)) . $payload;fwrite($apns, $apnsMessage);


    一个引入注目的新特性是(推送通知),它允许向已安装相关应用程序的各设备直接发送消息。苹果在新闻提示或IM应用中展示了此特性,它也十分完美地适合于我们的服务器监视服务程序。


    在此,我们循环整个载荷队列进行发送。构建发送到APNS的二进制内容简单示例如下:

    打开连接


    -

    如果发送错误,你可以参考$errorString。它也包括了SSL许可证不正确时的详细信息。

    这将使消息显示于设备上,触发提升声音并将“1”置于程序图标上。默认按钮“Close”和“View”同时会显示于弹出窗口上。

    socket_close($apns);fclose($apns);

    发送载荷

        创建载荷

        基本结构

        有一个开源服务器库实现了以上所有功能,它依赖于。我们不想使用任何第三方代码,所以完全自己编写了自己的服务器。我们使用自定义cron系统,几秒钟运行一次。


        在我们的 Server Density 传奇世界sf 程序中,我们在程序启动时调用相应的令牌生成方法,然后通过传回给我们的服务器 。这将使得deviceToken存储于服务器的有关用户的数据库中,从而我们可以使用它与持有此设备的用户进行通讯。

        本教程不涉及反馈服务的使用。


        Apple推荐使用这种方法,因为如果你在发送各载荷时频繁连接和断开,APNS有可能会封锁你的IP。


        原生接口使用原生socket,具有二进制内容,采用数据流技术,不产生回馈。




        c9d4c07c fbbc26d6 ef87a44d 53e16983 1096a5d5 fd825475 56659ddd f715defc

        php-apns

        显示 $payload 的内容可以看到传送到APNS 的JSON字符串:


        我们的程序提供一个选项,当你设定的某个服务器事件发生时,通知会直接发送到你的劲舞团私服上。这是非常有用的因为它提醒用户立即打开我们的程序查看引起此警示的服务器详情。

        WMI不仅可以获取想要的计算机数据,而且还可以用以远程控制。远程控制计算机不仅是黑客们的梦想,也是大多数网络管理者所渴望得到的,尤其在现代的网络中,每一个网络管理者所面对的局域网,都是由一个庞大的计算机群组成,如果有效的管理网络的每一台计算机就显得格外重要了。目前网络管理软件通常的做法是,在远程计算机上运行客户端后台程序,在本地计算机上运行一个服务器端前台控制程序,通过这二个程序直接的通讯实现对计算机的远程控制。这种作法的缺点是十分明显的,当客户端关闭了后台程序,这种远程管理就无法实现了,所以为了克服这个缺点,远程控制软件的客户端程序就做的非常隐蔽,使用户在不知觉中运行程序。

          其实做远程控制软件,WMI是一个很好的选择,尤其是在目前,合击私服,Windows 2000已经成为了主流的,利用WMI编写远程控制软件可以省略了已往远程控制软件最头痛的一个环节--分发客户端程序。

          版权声明:任何获得天极网授权的网站,转载时请务必保留作者信息和以下链接
          天极开发C#专栏:
         
          本节中介绍的远程控制程序,能够让使用者重启和关闭远程计算机。其所使用的就是WMI,下面是Visual C#中利用WMI控制远程计算机具体实现步骤。

          1. 首先启动Visual Studio .Net,依次选择"文件"、"新建"、"项目"菜单后,在弹出"新建项目"对话框中将"项目类型"设置为"Visual C#项目",将"模板"设置为"Windows应用程序",在"名称"文本框中输入"利用WMI控制远程计算机",在"位置"的文本框中输入"E:/VS.NET项目",然后单击"确定"按钮。这样在"E:/VS.NET项目"传奇外传sf中就创建了一个新的文件夹"利用WMI控制远程计算机",里面存放的就是"利用WMI控制远程计算机"的项目文件。

          2. 重新执行一下实现【获取远程计算机硬盘信息】项目中的第二至第四步骤。

          3. 把Visual Studio .Net当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往窗体中拖入下列组件,并执行相应操作:

          三个TextBox组件,用以输入远程计算机名称(或IP地址)、远程计算机WMI操作用户名和口令。

          一个ComboBox组件,用以选择对远程计算机执行的操作类型。

          四个Label组件。

          一个Button组件,名称为button1,拖入窗体后,双击此组件,则系统会在Form1.cs文件中自动产生其Click事件对应的处理代码。

          4. 按照表06中的数据调整各组件属性对应的数值:

        组件类型 组件名称 属性 设置结果
        Form Form1 Text 利用WMI控制远程计算机
        Form1 FormBorderStyle FixedSingle
        Form1 MaximizeBox False
        Label label1 Text 机器名称或IP地址:
        label2 Text 具有WMI权限的超级用户名:
        label3 Text 口令:
        label4 Text 选择控制类型:
        TextBox textBox1 Text ""
        textBox2 Text ""
        textBox3 PasswordChar *
        textBox3 Text ""
        Button button1 Text 执行
        button1 FlatStyle Flat
              表06:【利用WMI控制远程计算机】项目窗体中各组件的主要属性设定数值表

          并按照图09中各组件的位置和排列顺序调整窗体中组件的位置和排列顺序:


          5. 把Visual Studio .Net的当前窗口切换到Form1.cs文件的编辑窗口,并用下列代码替换Form1.cs中的button1的Click事件对应的处理代码。下列代码的作用是对根据用户的选择对远程计算机进行进行相应的远程控制:

        private void button1_Click ( object sender , System.EventArgs e )
        {
         //确定WMI操作的范围
         ConnectionOptions options = new ConnectionOptions ( ) ;
         //设定用于WMI连接操作的用户名
         options.Username = textBox2.Text ;
         //设定用户的口令
         options.Password = textBox3.Text ;
         try
         {
          ManagementScope Conn = new ManagementScope( "////" + textBox1.Text + "//root//cimv2", options ) ;
          Conn.Connect();
          //确定WMI操作的内容
          ObjectQuery oq = new ObjectQuery ( "SELECT * FROM Win32_OperatingSystem" ) ;
          ManagementObjectSearcher query1 = new ManagementObjectSearcher ( Conn , oq ) ;
          //获取WMI操作内容
          ManagementObjectCollection queryCollection1 = query1.Get ( ) ;
          //根据使用者选择,执行相应的远程操作
          foreach ( ManagementObject mo in queryCollection1 )
          {
           string [ ] ss= { "" } ;
           //执行重启操作
           if (comboBox1.Text =="重新启动")
           {
            mo.InvokeMethod ( "Reboot" , ss ) ;
           } else
            //执行远程关机
            if ( comboBox1.Text =="远程关机")
            {
             mo.InvokeMethod ( "Shutdown" , ss ) ;
            }else
             MessageBox.Show ("选择不正确的操作!","错误!");
           }
          }
          //报错
          catch ( Exception ee )
          {
           MessageBox.Show ( "连接" + textBox1.Text + "出错,出错信息为:" + ee.Message ) ;
          } 
        }

          6. 至此,在上述步骤都正确完成,并全部保存后,【利用WMI控制远程计算机】下面的全部工作就完成了。此时单击【F5】快捷键,就可以运行程序了。在程序的【计算机名称或IP地址】文本框中输入要控制的远程计算机名称或IP地址,在【具有WMI权限的用户名】和【口令】文本框中输入具有WMI操作的帐户和口令,在【选择控制类型】组合框中选择对远程计算机的控制类型后,单击【执行】按钮,则程序就能够对指定的远程计算机进行相应的控制了。图10是【利用WMI控制远程计算机】的运行界面。


          总结:

          通过以上示例,可见WMI的确是一个非常有用的东西,但由于它还比较新,国内甚至国外还没有完整的介绍资料,因此只是简要的浏览了一下WMI的应用,希望本文的内容能够对大家了解、掌握使用Visual C#调用WMI的方法有所帮助。
        $apnsHost = 'gateway.sandbox.push.apple.com';$apnsPort = 2195;$apnsCert = 'apns-dev.pem';$streamContext = stream_context_create();stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort,传奇sf外挂, $error, $errorString, 2,STREAM_CLIENT_CONNECT, $streamContext);


          使用 PHP 很容易根据数组并而创建载荷:


          要进行推送服务的第一件事就是获取推送许可证。它用来对你通过SSL与APNS通讯进行识别。

          $apnsMessage 包括了正确的二进制载荷,而fwrite 将载荷写入当前活动的数据流连接中。

          在Server Density中,一旦产生了一条提示,将建立一个载荷并插入队列中。因此有必要时我们可以同时发送多个载荷,新开传奇世界私服

          将此文件保存为一个易记的名字,你有可能以后会用到它。上述步骤同样适合于生成产品许可证。






          下一篇:下面没有链接了