Avatar billede amews_aj Nybegynder
03. maj 2006 - 22:41 Der er 46 kommentarer og
1 løsning

Svare ved ping på port?

Jeg vil gerne have en lille kode der, når nogen via nettet forsøger at taste XX.XXX.XXX.XX:50000 fx, så skal den blot give et svar tilbage. Altså sådan så jeg efterfølgende kan pinge den, og få et svar - hvordan gør jeg det meget let ?
Avatar billede amews_aj Nybegynder
03. maj 2006 - 22:59 #1
Altså jeg har fundet frem til at registere ping sådan her:

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ChatMain
{
    public static void Main(string[] args)
    {
        Server srv = new Server();
        srv.Run();
    }
}

class Server
{
    private ArrayList allclients;
    public void Run()
    {
        allclients = new ArrayList();
        TcpListener server = new TcpListener(IPAddress.Any, 3389);
        server.Start();

        for (int i = 1; i > 0; i++)
        {
            Console.ReadKey();
            if (server.Pending())
            {
                Console.WriteLine("TEST");
            }
        }
    }
}



----------------------

MEN hvordan giver jeg svar tilbage?
Avatar billede arne_v Ekspert
03. maj 2006 - 23:30 #2
du accepter en TcpClient og getter en Stream fra den og wrapper den i
en StreamWriter
Avatar billede amews_aj Nybegynder
04. maj 2006 - 09:48 #3
Jeg vil meget gerne have et direkte kode eksempel så jeg senere kan udforske det lidt. Jeg er helt ny i C#, men har brug for denne kode.
Avatar billede arne_v Ekspert
04. maj 2006 - 13:16 #4
private TcpListener server;
        private TcpClient client;
        private StreamReader rdr;
        private StreamWriter wrt;
....
            server = new TcpListener(IPAddress.Any, 1234);
            server.Start();
            client = server.AcceptTcpClient();
            rdr = new StreamReader(client.GetStream());
            wrt = new StreamWriter(client.GetStream());
Avatar billede amews_aj Nybegynder
04. maj 2006 - 14:22 #5
Når jeg prøver at at skrive dette i en cmd: xx.xx.xxx.xx:3389 så siger den bare at værten ikke er fundet (virker heller ikke lokalt)

Kode:

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ChatMain
{
    public static void Main(string[] args)
    {
        Server srv = new Server();
        srv.Run();
    }
}

class Server
{

    private TcpListener server;
    private TcpClient client;
    private StreamReader rdr;
    private StreamWriter wrt;


    public void Run()
    {

        server = new TcpListener(IPAddress.Any, 3389);
        server.Start();
        client = server.AcceptTcpClient();
        rdr = new StreamReader(client.GetStream());
        wrt = new StreamWriter(client.GetStream());
    }
}
Avatar billede arne_v Ekspert
04. maj 2006 - 14:26 #6
du skriver

telnet xx.xx.xx.xx 3389

?
Avatar billede amews_aj Nybegynder
04. maj 2006 - 15:37 #7
Ja så forbinder den jo - men det er ikke sådan jeg vil. Jeg vil gøre så jeg kan pinge den.

Via et php-script skal jeg se om min computer er tændt eller ej... (Programmet skal køre i baggrunden)

<?
$checkHttp = @fsockopen("XX.XX.XXX.XX", 3389, $errno, $errstr, 3);  // (ip, port, fejlnr, fejlvariabel, antal forsøg)
if(!$checkHttp) {
    echo "OFFLINE";
}else{
    echo "ONLINE";
    fclose($checkHttp);
}
?>
Avatar billede arne_v Ekspert
04. maj 2006 - 16:35 #8
laver fsockopen ike det samme som en telnet ?
Avatar billede arne_v Ekspert
04. maj 2006 - 16:36 #9
hvis du bruger .NET 2.0 var det ioevrigt meget nemt at lave en rigtig ping
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:14 #10
Jeg bruger 2.0 - hvordan gør jeg så det... ;)
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:17 #11
Har lige prøvet af - og kan i hvert fald ikke få den til at skrive online i mit php script..
Avatar billede arne_v Ekspert
04. maj 2006 - 17:20 #12
eksmepel:

        Ping p = new Ping();
        PingReply pr = p.Send("www.tv2.dk");
        if(pr.Status == IPStatus.Success)
        {
            Console.WriteLine("TV2 oppe (tid = " + pr.RoundtripTime + " ms)");
        }
        else
        {
            Console.WriteLine("TV2 nede");
        }
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:23 #13
Du har forstået det forkert...
Jeg vil have et program åben som lytter til en port - jeg skal pinge den port via mit php script, og dermed kunne konkludere at programmet på min pc er startet.

Jeg pinger pc'en og porten med php, programmet skal så svare..
Jeg vil altså ikke pinge noget med programmet
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:24 #14
Ligesom når man pinger via cmd
ping xx.xx.xxx.xx:3389

hvis jeg gør det nu, så får den intet svar tilbage...
Avatar billede arne_v Ekspert
04. maj 2006 - 17:31 #15
ok - sorry

ja, men saa burde TcpListener / TcpClient virke

dit program ser ud som ovenfor ? (hvis programmet skal lave noget andet, saa
skal du vel koere koden i en separat traad)

kan du putte noget debug kode i dit program og se om det modtager en connection ?
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:32 #16
Det har jeg gjort - den modtager en connection når der bruges telnet - men hverken ved php eller ping...

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

class ChatMain
{
    public static void Main(string[] args)
    {
        Server srv = new Server();
        srv.Run();
    }
}

class Server
{

    private TcpListener server;
    private TcpClient client;
    private StreamReader rdr;
    private StreamWriter wrt;


    public void Run()
    {

        server = new TcpListener(IPAddress.Any, 3389);
        server.Start();
        pingit();
    }

    public void pingit()
    {
        client = server.AcceptTcpClient();
        rdr = new StreamReader(client.GetStream());
        wrt = new StreamWriter(client.GetStream());
        Console.WriteLine("PING");
        pingit();
    }
}
Avatar billede arne_v Ekspert
04. maj 2006 - 17:36 #17
man kan da ikke bruge rigtig ping paa en port - kan man ?
Avatar billede arne_v Ekspert
04. maj 2006 - 17:36 #18
ping bruger ICMP saa den kan en TcpListener ikke fange
Avatar billede arne_v Ekspert
04. maj 2006 - 17:38 #19
men det undrer mig at din fsockopen ikke virker

der er ikke noget firewall/router som blokerer ?
Avatar billede amews_aj Nybegynder
04. maj 2006 - 17:58 #20
Det med ping er vist rigtigt...

Har deaktiveret firewall og forwardet port i router...
Avatar billede amews_aj Nybegynder
04. maj 2006 - 18:00 #21
fsockopen(): unable to connect to xx.xx.xxx.xx:3389 in /var/www/xxxxx.dk/public_html/server.php on line 2
Avatar billede amews_aj Nybegynder
04. maj 2006 - 18:04 #22
Underligt - når jeg kører den på min lokale webserver så virker det selvom jeg bruger den eksterne ip til fsockopen

Men på mit webhotel ved unoeuro vil den ikke :S
Avatar billede amews_aj Nybegynder
04. maj 2006 - 18:11 #23
Øhh hvis jeg på mit webhotel prøver med port 80 (min webserver) så virker det fint.. :S
Avatar billede amews_aj Nybegynder
04. maj 2006 - 18:20 #24
Hvis jeg sætter programmet til på port 80 virker det også - men ved alle andre porte virker det ikke.,... :S
Avatar billede arne_v Ekspert
04. maj 2006 - 18:36 #25
det lugter langt vaek af firewall som kun er aabnet for port 80
Avatar billede amews_aj Nybegynder
04. maj 2006 - 18:42 #26
Ja - på sin vis enig - men når nu firewall er deaktiveret og router er forwardet med de porte.. (Ved at den er forwardet korrekt da andre programmer med de porte jeg forsøger at bruge - sagtens kan køre) Selvf. er de programmer ikke startet imens ;)

Kan ikek være noget opsætning på serveren ?
Avatar billede arne_v Ekspert
04. maj 2006 - 19:02 #27
jeg antager at setup er:

PHP/web hotel--------------------------C# app/din PC

men saa er der jo 2 firewalls involveret:

PHP/web hotel-----web hotel firewall---------------------din firewall----C# app/din PC

maaske blokerer web hotellets firewall for udgaaende porte andre end 80 ?
Avatar billede amews_aj Nybegynder
04. maj 2006 - 19:12 #28
Ja det kan lige passe - bare dumt for mig
Den skal ikek skrive online når min server er tændt (webserver) men når programmet (C#) er tændt...
Avatar billede amews_aj Nybegynder
04. maj 2006 - 19:15 #29
Det kan jeg vel ikke undgå... :S
Avatar billede arne_v Ekspert
04. maj 2006 - 19:19 #30
du har ikke mulighed for at bruge port 80 ?
Avatar billede arne_v Ekspert
04. maj 2006 - 19:20 #31
kan du ikke vende den omkring ?

du lader et program paa din PC kalde http://www.xxxx.dk/IAmOnline.php
hver 2. minute

IAmOnline.php opdaterer LastOnline feltet i Foobar tabellen med NOW()

din online side tester om Foobar.LastOnline er aeldre end 3 minutter,
hvis ja saa offline ellers online
Avatar billede amews_aj Nybegynder
04. maj 2006 - 19:24 #32
Hmm... Vil det ikke belaste serveren at scriptet står og kører konstant... ? Og pc'en for den sags skyld ?
Avatar billede arne_v Ekspert
04. maj 2006 - 19:28 #33
lidt, men en gang hver 2. minut er ikke meget
Avatar billede amews_aj Nybegynder
04. maj 2006 - 19:34 #34
nej...
Du kan ikke komme i tanker om andre måder at tjekke om et program på en pc er tændt. (Skal kunne lukke programmet og så være "disconnected")
Avatar billede amews_aj Nybegynder
04. maj 2006 - 20:02 #35
Hvordan ville du evt. lave det andet du foreslog.
Vil også gerne kunne afbryde/starte den uden at skulle lukke programmet. Altså nogle knapper til det - hvad vil action være til at stoppe "opdateringen" og starte den igen.
Avatar billede arne_v Ekspert
04. maj 2006 - 21:19 #36
en kanp som starter en traad og en anden knap som stopper traaden
Avatar billede amews_aj Nybegynder
04. maj 2006 - 21:21 #37
Skal jeg indsætte en browser eller hvad for at få den til at åbne siden.. ?
Avatar billede arne_v Ekspert
04. maj 2006 - 21:24 #38
jeg tror at vi er ved at have vaeret forbi de mulighedfer som der er
Avatar billede amews_aj Nybegynder
04. maj 2006 - 21:25 #39
du lader et program paa din PC kalde http://www.xxxx.dk/IAmOnline.php
hver 2. minute

>>

HOW ?
Avatar billede arne_v Ekspert
04. maj 2006 - 21:40 #40
Der er en klasse (Http)WebRequest som goer det meget nemt at kalde web sider
fra C#
Avatar billede arne_v Ekspert
04. maj 2006 - 21:45 #41
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetStream());
string html = sr.ReadToEnd();
Avatar billede amews_aj Nybegynder
04. maj 2006 - 21:49 #42
'System.Net.HttpWebResponse' does not contain a definition for 'GetStream'
Avatar billede arne_v Ekspert
04. maj 2006 - 22:12 #43
GetResponseStream()
Avatar billede amews_aj Nybegynder
04. maj 2006 - 22:22 #44
Tak, så må jeg finde ud af hvad jeg gør - nu har jeg i hvert fald koden til det...
Avatar billede amews_aj Nybegynder
04. maj 2006 - 22:22 #45
smid et svar ;)
Avatar billede arne_v Ekspert
04. maj 2006 - 22:28 #46
kommer her
Avatar billede amews_aj Nybegynder
04. maj 2006 - 22:31 #47
tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester