Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 1767
Hei. Jeg tenker å lage en veldig enkel UDP server, som skal ta i mot en enkel melding, og deretter avslutte en prosess som kjører på maskinen(gitt at den kjører), for så å starte prosessen igjen.

Grunnen er at jeg har en litt ustabil medieserver, som i blant trenger en restart. Jeg er litt lei av å gå fra stua til soverommet for å restarte det. Dessuten hadde det vært fint å kunne skru på programmer uten å være til stede, for eksempel teamviewer eller en ftp server.

Planen er å lage en liten klient til android, og server til windows.

Spørsmålet er da: Hvordan gjør jeg det på windowssiden? Jeg regner med at jeg må bruke windowskommandoer for å avslutte prosesser?
m0b
m0b's Avatar
DonorAdministrator
Jeg er sannsynligvis den siste som skulle sagt noe slikt, men. Unnskyld meg, hvorfor i alle dager ønsker du å lage dette systemet? Ville det ikke vært langt smartere å fikse medieserveren som er ustabil? Man tetter ikke Bismarck med dasspapir og samtidig regne med å komme seg tørrskodd hjem.

Har du erfaring fra programmering tidligere? Hvilket språk har du tenkt å bruke? Hvorfor UDP? Kan du nettverksprogrammering? Har du erfaring med å utvikle samme programvare som kan kompileres til flere platformer?

Ja, det kan løses med systemkall til windows for å terminere prosessen du ønsker.

Ta en liten titt her http://msdn.microsoft.com/en-us/library/d6dtz42k.aspx
Sist endret av m0b; 19. august 2014 kl. 16:04.
Jeg ønsker å lage systemet av den årsak jeg skrev i hovedinnlegget. Medieserveren er ikke noe jeg har laget selv, og det skjer ikke ofte nok til at jeg gidder å bytte software.

Jeg har programmert en del, og ganske mye av det har vært nettverkskommunikasjon. Vet ikke hvorfor jeg følte det var nødvendig å nevne UDP, men nå gjorde jeg jo det. Årsaken til udp over tcp er at programmet skal være veldig simpelt, så simpelt at jeg ikke gidder å sette opp tcp connections.

Jeg har erfaring hovedsaklig fra java, men også litt php og python. En annen grunn til at jeg tenkte å gjøre det på denne måten er fordi jeg gjerne vil programmere litt, og det hørtes ut som et lite, og gjennomførbart prosjekt.

Etter litt googling fant jeg ut at systemkall til windows var enklere enn jeg gikk ut fra, så det blir nok java på begge sider. Da slipper jeg også problemet med å progge til flere platformer, nesten i alle fall.

Ser ut som jeg skal klare dette fint selv
m0b
m0b's Avatar
DonorAdministrator
Ok, bra. Fra åpningsinnlegget var det litt vanskelig å få grep på om du i det hele tatt noensinne hadde tatt i et IDE, og derfor alle spørsmålene.
Sist endret av m0b; 19. august 2014 kl. 16:27.
Microsoft har en egen RDP-klient på Google Play. Kan da bare lage et enkelt batch-script som du legger f.eks. på skrivebordet.
Spørsmålet er da: Hvordan gjør jeg det på windowssiden? Jeg regner med at jeg må bruke windowskommandoer for å avslutte prosesser?
Vis hele sitatet...

Kode

taskkill /F /IM notepad.exe

Evt.
Kode som gjør alt dette for deg i C#
( Edit: denne koden starter ingen process opp igjen. )

Server:

Kode

          UdpClient udpServer = new UdpClient(11000);
            while (true)
            {
                var remoteEndPoint = new IPEndPoint(IPAddress.Any, 11000);
                var data = udpServer.Receive(ref remoteEndPoint); // listen on port 11000

                string byteData = System.Text.Encoding.UTF8.GetString(data);

                Console.WriteLine("Got [" + byteData + "] from " + remoteEndPoint.ToString());

                // reply back ( status )
                Process[] processesToQuit = Process.GetProcessesByName("notepad");
                if (processesToQuit.Length >= 1)
                {
                    // if notepad is running
                    foreach (Process process in processesToQuit)
                    {
                        try
                        {
                            process.Kill();
                            Console.WriteLine("Success! Server Killed notepad.");
                            const string stringToSend = "Success! Server Killed notepad.";
                            byte[] bytearray = Encoding.ASCII.GetBytes(stringToSend);
                            udpServer.Send(bytearray, bytearray.Length, remoteEndPoint);
                        }
                        catch (Exception)
                        {
                            // if exception on killing notepad
                            Console.WriteLine("Killing notepad failed.");
                            const string stringToSend = "Killing notepad failed.";
                            byte[] bytearray = Encoding.ASCII.GetBytes(stringToSend);
                            udpServer.Send(bytearray, bytearray.Length, remoteEndPoint);
                        }
                    }
                }
                else
                {
                    // if notepad is not running
                    Console.WriteLine("Error: Process is not running. ( gives client that info ) .");
                    const string stringToSend = "notepad is not running.";
                    byte[] bytearray = Encoding.ASCII.GetBytes(stringToSend);
                    udpServer.Send(bytearray, bytearray.Length, remoteEndPoint);
                }
            }
client:

Kode

            // creates Client
            var client = new UdpClient();

            // SERVER IP ( 127.0.0.1 ?)
            IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); // endpoint where server is listening
            client.Connect(ep);

            // what to send ( string )
            const string stringToSend = "kill notepad";

            // create byteArray of string "stringToSend"
            byte[] bytearray = Encoding.ASCII.GetBytes(stringToSend);

            // send byteArray
            client.Send(bytearray, bytearray.Length);

            // then receive data ( status )
            var receivedData = client.Receive(ref ep);

            string byteData = System.Text.Encoding.UTF8.GetString(receivedData);

            Console.WriteLine("Got [" + byteData + "] back from server: " + ep.ToString());

            Console.ReadKey();
( Koden er ikke optimal. )
Sist endret av d0nk3y; 19. august 2014 kl. 17:41.
Endte opp med å lage et javaprogram som starter en .bat-fil når den får inn noe på en gitt port. Funket fint dette.

Jeg gadd ikke å lage en klient, men fant heller et veldig enkelt "UDP Sender" program som lå på Android Play. Men takk for innspill!

Da blir det nok noen kalorier spart i tiden fremover!