C#簡易遠隔制御作成ソースプログラム及び構想(クライアント)

6177 ワード

リモート制御のサーバ側では前述したように
http://blog.csdn.net/a112634313/article/details/7941446
クライアントの実装を開始します
クライアントの実装も簡単で、サーバとのsocket接続を実現し、サーバから送信されたメッセージを受信し、解析し、書き上げる方法を実行することがクライアントの実装原理です.
クライアントのインタフェースはとても簡単で、何もなくて、バックグラウンドで実行するソフトウェアなので、フロントのインタフェースはすべて余計で、プログラムで制御するだけでいいです.
どのようにフロントのインタフェースを隠すかについては、前に書いた文章を見て、フロントのインタフェースを隠します.
http://blog.csdn.net/a112634313/article/details/7939049
では、クライアントコードの実装を開始します.
まずサーバに接続するコードですが、これは欠かせません.
[csharp] view plain copy print ?
private Socket socket;  
  • ///    

  • /// 接続サーバ  
  • ///    

  • private void Conn()  
  • {  

  •     try  
  •     {  

  •         socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  •         IPEndPoint ipPort = new IPEndPoint(IPAddress.Parse("192.168.0.200"), 6160);  

  •         socket.Connect(ipPort);  
  •         Recevice();  

  •     }  
  •     catch (Exception)  

  •     {  
  •         Thread.Sleep(10000);  

  •         Conn();  
  •     }  

  • }  
            private Socket socket;
            /// 
            ///      
            /// 
            private void Conn()
            {
                try
                {
                    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPEndPoint ipPort = new IPEndPoint(IPAddress.Parse("192.168.0.200"), 6160);
                    socket.Connect(ipPort);
                    Recevice();
                }
                catch (Exception)
                {
                    Thread.Sleep(10000);
                    Conn();
                }
            }
    ここでは例外処理を使用しています.サーバが開いていない場合、クライアントは10秒おきにサーバと接続を試み、接続を失わないようにします.
    次に、サーバメッセージを受信する方法です.
    [csharp] view plain copy print ?
    ///    
  • /// サーバからのメッセージを受信  

  • ///    
  • private void Recevice()  

  • {  
  •     while (true)  

  •     {  
  •         byte[] byt = new byte[1024];  

  •         int length = socket.Receive(byt);  
  •         string jsonStr = System.Text.Encoding.UTF8.GetString(byt);  

  •         jsonStr = RemoveEmptyChar(jsonStr);  
  •         if (length > 0)  

  •         {  
  •             MSGStruct msg = JsonMapper.ToObject(jsonStr);  

  •             GetOperation(msg);  
  •         }   

  •     }  
  • }  
  •         /// 
            ///           
            /// 
            private void Recevice()
            {
                while (true)
                {
                    byte[] byt = new byte[1024];
                    int length = socket.Receive(byt);
                    string jsonStr = System.Text.Encoding.UTF8.GetString(byt);
                    jsonStr = RemoveEmptyChar(jsonStr);
                    if (length > 0)
                    {
                        MSGStruct msg = JsonMapper.ToObject(jsonStr);
                        GetOperation(msg);
                    } 
                }
            }
    ここでは、メッセージをループして受信し、メッセージをjsonオブジェクトに変換します.whileを使用しない場合、メソッドはメッセージを1回しか受信しないので停止します.
    次に操作を開始し、msgの異なるkeyに基づいて異なる方法を選択します.
    [csharp] view plain copy print ?
    private void GetOperation(MSGStruct msg)  
  • {  

  •     switch (msg.key)  
  •     {  

  •         case "text":  
  •             MessageBox.Show(msg.json);  

  •             break;  
  •         case "openUrl":  

  •             Thread _threadUrl = new Thread(OpenUrl);  
  •             _threadUrl.IsBackground = true;  

  •             _threadUrl.Start(msg.json);  
  •             break;  

  •     }  
  • }  
  •         private void GetOperation(MSGStruct msg)
            {
                switch (msg.key)
                {
                    case "text":
                        MessageBox.Show(msg.json);
                        break;
                    case "openUrl":
                        Thread _threadUrl = new Thread(OpenUrl);
                        _threadUrl.IsBackground = true;
                        _threadUrl.Start(msg.json);
                        break;
                }
            }
    は簡単なリモート制御で2つの機能しか実現していないため、ここでは2つの方法しかなく、必要に応じて他の機能を追加することができます.
    [csharp] view plain copy print ?
    static OpenClass open;  
  • private void OpenUrl(object josn)  

  • {  
  •     string json = josn.ToString();  

  •     open = JsonMapper.ToObject(json);  
  •     while (open.IsStart==1)  

  •     {  
  •         Process.Start("http://" + open.openUrl);  

  •         Thread.Sleep(int.Parse(open.stopTime+"000"));  
  •     }  

  • }  
  • public class OpenClass  

  • {  
  •     ///    

  •     /// 開くWebサイト  
  •     ///    

  •     public string openUrl;  
  •     ///    

  •     /// 間隔の時間  
  •     ///    

  •     public string stopTime;  
  •     ///    

  •     /// 開始するかどうか、1は開始、0は閉じる  
  •     ///    

  •     public int IsStart;  
  • }  
  •         static OpenClass open;
            private void OpenUrl(object josn)
            {
                string json = josn.ToString();
                open = JsonMapper.ToObject(json);
                while (open.IsStart==1)
                {
                    Process.Start("http://" + open.openUrl);
                    Thread.Sleep(int.Parse(open.stopTime+"000"));
                }
            }
            public class OpenClass
            {
                /// 
                ///       
                /// 
                public string openUrl;
                /// 
                ///      
                /// 
                public string stopTime;
                /// 
                ///     ,1    ,0    
                /// 
                public int IsStart;
            }

    これは数秒おきにWebページを開く実装です.これがクライアントの実装方法です.どのような機能が必要なのか、サーバで定義し、クライアントで実装方法を書くだけで、完璧になります.
    ソースコードダウンロードアドレスおよびExeプログラム
    http://download.csdn.net/detail/a112634313/4547248