Advertisement
Guest User

Server

a guest
Nov 8th, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Shapes;
  13. using System.Net;
  14. using System.Net.Sockets;
  15. using System.ComponentModel;
  16. using System.Diagnostics;
  17. namespace ViewMyS
  18. {
  19.     /// <summary>
  20.     /// Interaktionslogik für MainWindow.xaml
  21.     /// </summary>
  22.     ///
  23.     public partial class MainWindow : Window
  24.     {
  25.  
  26.         //###############
  27.         string INC = "";
  28.         bool logme = false;
  29.         string opip; //OPPONENT IP
  30.         string result; //RÜCKGABEWERT
  31.         string sendresult; //AUSGABE RÜCKGABEWERT
  32.         bool running = false;
  33.         bool sendonvoid = false;
  34.         //###############
  35.         public MainWindow()
  36.         {
  37.             InitializeComponent();
  38.         }
  39.         //################
  40.         bool ende = false;
  41.         string comstring;
  42.         //#################
  43.         BackgroundWorker bw = new BackgroundWorker();
  44.         //#################
  45.  
  46.         private void button1_Click(object sender, RoutedEventArgs e)
  47.         {
  48.             if (running == true)
  49.             {
  50.                 MessageBox.Show("The System is listening, you cannot start another instance of the Listener-Process!");
  51.             }
  52.  
  53.             WorkStart();
  54.             running = true;
  55.  
  56.         }
  57.  
  58.         private void WorkStart()
  59.         {
  60.             try
  61.             {
  62.                 bw.DoWork += new DoWorkEventHandler(bw_DoWork);
  63.                 bw.RunWorkerAsync();
  64.             }
  65.             catch (Exception)
  66.             {
  67.                 return;  //Damit bei mehrfachem klicken keine Fehlermeldung auftritt.
  68.             }
  69.         }
  70.  
  71.         private void bw_DoWork(object sender, DoWorkEventArgs e)
  72.         {
  73.             BackgroundWorker worker = sender as BackgroundWorker;
  74.             bw.WorkerSupportsCancellation = true;
  75.             Receive();
  76.  
  77.         }
  78.  
  79.         public void Receive()
  80.         {
  81.             try
  82.             {
  83.                 Socket sock = new Socket(AddressFamily.InterNetwork,
  84.                            SocketType.Dgram, ProtocolType.Udp);
  85.                 IPEndPoint iep = new IPEndPoint(IPAddress.Any, 24710);
  86.                 sock.Bind(iep);
  87.                 EndPoint ep = (EndPoint)iep;
  88.  
  89.                 byte[] data = new byte[1024];
  90.                 int recv = sock.ReceiveFrom(data, ref ep);
  91.                 string stringData = Encoding.ASCII.GetString(data, 0, recv);
  92.  
  93.                 data = new byte[1024];
  94.                 recv = sock.ReceiveFrom(data, ref ep);
  95.                 stringData = Encoding.ASCII.GetString(data, 0, recv);
  96.                 Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(stringData + " command came in")));
  97.                 Dispatcher.Invoke(new Action(() => INC = stringData));
  98.                 sock.Close();
  99.                 Interpret();
  100.                 if (ende == true)
  101.                 {
  102.                     return;
  103.                 }
  104.                 Receive();
  105.                 // return;
  106.             }
  107.             catch (Exception ex)
  108.             {
  109.                 MessageBox.Show("ERROR" + Environment.NewLine + Environment.NewLine + ex );
  110.             }
  111.         }
  112.  
  113.         private void button2_Click(object sender, RoutedEventArgs e)
  114.         {
  115.             running = false;
  116.             ende = true;
  117.         }
  118.  
  119.         public void Interpret()
  120.         {
  121.             string[] inter = INC.Split(' ');
  122.             //if (inter[0] == "result")
  123.             //{
  124.             //    Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(INC)));
  125.  
  126.             //}
  127.             if (inter.Length == 1)
  128.             {
  129.                 switch (inter[0])
  130.                 {
  131.                     case "shutdown":
  132.                         Process.Start("shutdown", "/s /f /t 0");
  133.                         break;
  134.  
  135.                     case "restart":
  136.                         Process.Start("shutdown", "/r /f /t 0");
  137.                         break;
  138.  
  139.                     case "ping":
  140.                         result = "pong";
  141.                         ResultSend();
  142.                         break;
  143.                 }
  144.                 return;
  145.             }
  146.             if (inter.Length == 2)
  147.             {
  148.                 switch (inter[0])
  149.                 {
  150.                     case "shutdown":
  151.                         try
  152.                         {
  153.                            
  154.                             int x = Convert.ToInt32(inter[1]);
  155.                             if (sendonvoid == true)
  156.                             {
  157.                                 result = "Shutdown in " + x + " seconds.";
  158.                                 ResultSend();
  159.                             }
  160.                             Process.Start("shutdown", "/s /f /t " + x);
  161.                         }
  162.                         catch
  163.                         {
  164.                             Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("shutdown command came in")));
  165.                             Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(inter[1] + " could not be interpreted")));
  166.                         }
  167.                         break;
  168.  
  169.                     case "restart":
  170.                         try
  171.                         {
  172.                             int x = Convert.ToInt32(inter[1]);
  173.                             if (sendonvoid == true)
  174.                             {
  175.                                 result = "Restart in " + x + " seconds.";
  176.                                 ResultSend();
  177.                             }
  178.                             Process.Start("shutdown", "/r /f /t " + x);
  179.                         }
  180.                         catch
  181.                         {
  182.                             Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("restart command came in")));
  183.                             Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(inter[1] + " could not be interpreted")));
  184.                         }
  185.                         break;
  186.  
  187.                     case "com":
  188.                         string y = inter[1];
  189.                         if (sendonvoid == true)
  190.                         {
  191.                             result = "Processing command " + y;
  192.                             ResultSend();
  193.                         }
  194.                         Process.Start(y);
  195.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("commandline query came in")));
  196.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("trying to " + y)));
  197.                         break;
  198.  
  199.                     case "ip":
  200.                         string v = inter[1];
  201.                         opip = v;
  202.                         if (sendonvoid == true)
  203.                         {
  204.                             result = "New IP! " + v + " since you received this, it seems to work.";
  205.                             ResultSend();
  206.                         }
  207.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("you received an ip")));
  208.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("hopefully this works: " + v)));
  209.                         break;
  210.  
  211.                     case "msg":
  212.                         string w = INC;
  213.                         if (sendonvoid == true)
  214.                         {
  215.                             result = "Your Partner got your Message!";
  216.                             ResultSend();
  217.                         }
  218.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("msg:" + Environment.NewLine + w)));
  219.                         break;
  220.  
  221.                 }
  222.                 return;
  223.             }
  224.             if (inter.Length > 2)
  225.             {
  226.                 switch (inter[0])
  227.                 {
  228.                     case "com":
  229.                         List<string> relist = new List<string>();
  230.                         relist = inter.ToList();
  231.                         relist.RemoveAt(0);
  232.                         comstring = "";
  233.                         foreach (string d in relist)
  234.                         {
  235.                             comstring = comstring + d + " ";
  236.                         }
  237.  
  238.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("commandline query came in")));
  239.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("trying to " + comstring)));
  240.  
  241.                         Process p = new Process();
  242.                         p.StartInfo.UseShellExecute = false;
  243.                         p.StartInfo.RedirectStandardOutput = true;
  244.                         p.StartInfo.FileName = "cmd";
  245.                         p.StartInfo.Arguments = "/k" + comstring;
  246.                         p.Start();
  247.                         result = p.StandardOutput.ReadToEnd();
  248.                         p.WaitForExit();
  249.                         if (logme == true)
  250.                         {
  251.                             Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(result)));
  252.  
  253.                         }
  254.                         //  Process.Start("cmd.exe","/k " + comstring);
  255.                         //  CUT();
  256.                         checker();  
  257.                     // ResultSend();
  258.                         break;
  259.                     case "test":
  260.  
  261.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("testing method called. Worked.")));
  262.                         break;
  263.  
  264.                     default:
  265.                         Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add(INC)));
  266.                         break;
  267.                 }
  268.                 return;
  269.                
  270.             }
  271.  
  272.  
  273.             return;
  274.  
  275.         }
  276.         //public void CUT()
  277.         //{
  278.         //    sendresult = "result " + Environment.NewLine + result;
  279.  
  280.         //    string input = sendresult;
  281.         //    StringBuilder sb = new StringBuilder();
  282.         //    for (int i = 0; i < input.Length; i++)
  283.         //    {
  284.         //        if (i % 97 == 0) //modulo 100
  285.         //            sb.Append('#');
  286.         //        sb.Append(input[i]);
  287.         //    }
  288.         //    string formchangeme = sb.ToString();
  289.  
  290.         //    string[] splittedresult = formchangeme.Split('#');
  291.  
  292.         //    foreach (string s in splittedresult)
  293.         //    {
  294.         //        sendresult = s;
  295.         //        ResultSend();
  296.         //    }
  297.         //    return;
  298.         //}
  299.         public void checker()
  300.         {
  301.             //if (result.Length > 100)
  302.             //{
  303.             //    string[] parray = SplitInParts(result, 100).ToArray();
  304.             //    foreach (string s in parray)
  305.             //    {
  306.             //        result = s;
  307.             //        ResultSend();
  308.             //    }
  309.             //    result = "";
  310.             //    return;
  311.  
  312.             //}
  313.             ResultSend();
  314.         }
  315.  
  316.  
  317.        
  318.  
  319.         public void ResultSend()
  320.         {
  321.             try
  322.             {
  323.                 sendresult = result;
  324.                 string TextBoxer = sendresult; //TEXT
  325.                 string IPBoxer = opip; //EMPFÄNGER
  326.  
  327.                 byte[] myWriteBuffer = Encoding.ASCII.GetBytes(TextBoxer);
  328.  
  329.                 //Socket definieren
  330.                 Socket bcSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  331.  
  332.                 //EndPoint definieren bzw. Ziel des Broadcastes
  333.                 IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse(IPBoxer), 24711);
  334.  
  335.                 //Optionen auf den Socket binden
  336.                 bcSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
  337.  
  338.                 //Broadcast senden
  339.                 bcSocket.SendTo(myWriteBuffer, iep1);
  340.  
  341.                 //Socket schliessen, nach erfolgreichem Senden des Broadcastes
  342.                 bcSocket.Close();
  343.             }
  344.             catch (Exception ex)
  345.             {
  346.                 Dispatcher.Invoke(new Action(() => this.listBox1.Items.Add("Error sending answer, i guess the IP is invalid")));
  347.                 return;
  348.             }
  349.         }
  350.  
  351.         private void checkBox1_Checked(object sender, RoutedEventArgs e)
  352.         {
  353.             logme = true;
  354.         }
  355.  
  356.         private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
  357.         {
  358.             logme = false;
  359.         }
  360.  
  361.         private void Window_Loaded(object sender, RoutedEventArgs e)
  362.         {
  363.             WorkStart();
  364.         }
  365.  
  366.         private void checkBox1_Checked_1(object sender, RoutedEventArgs e)
  367.         {
  368.             sendonvoid = true;
  369.         }
  370.  
  371.         private void checkBox1_Unchecked_1(object sender, RoutedEventArgs e)
  372.         {
  373.             sendonvoid = false;
  374.         }
  375.  
  376.  
  377.        
  378.             //public IEnumerable<String> SplitInParts(this String s, Int32 partLength)
  379.             //{
  380.             //    if (s == null)
  381.             //        throw new ArgumentNullException("s");
  382.             //    if (partLength <= 0)
  383.             //        throw new ArgumentException("Part length has to be positive.", "partLength");
  384.  
  385.             //    for (var i = 0; i < s.Length; i += partLength)
  386.             //        yield return s.Substring(i, Math.Min(partLength, s.Length - i));
  387.             //}
  388.  
  389.        
  390.  
  391.      
  392.     }
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement