Avatar billede sollie Nybegynder
14. marts 2007 - 13:28 Der er 20 kommentarer og
1 løsning

Prøve at forbinde klient til server.

Jeg er igang med et lille projekt i C# hvor jeg laver en lille klient og en lille server.

Angående klienten så skal den prøve at se om den kan forbinde til serveren og så give et boolsk reslutat om forbindelsen kunne finde sted eller ej. Mit problem er bare at klient applikationen fucker up hvis den ikke kan forbinde til serveren, f.eks. hvis server applikationen ikke køre.

Koden ser sådanne ud:

        public bool Connect()
        {
            bool canConnect = false;
            try
            {
                TcpClient connection = new TcpClient(address,port);
                canConnect = true;
                byte[] bytes = new byte[1024];
                string text = "shute";
                bytes = new ASCIIEncoding().GetBytes(text);
                Stream ST = connection.GetStream();

                connection.Close();
            }
            catch (IOException)
            {
                canConnect = false;
            }

            return canConnect;
        }

Problemet er sætningen "TcpClient connection = new TcpClient(address,port);"

Hvis jeg opretter en TcpClient uden at give den adresse, og porten og så siger "connection.connect(adresse, port);" efter oprettelsen af TcpClient'en er det den sætning der giver problemer. Læg mærke til det hele er i en try catch sætning.

Nogen der kan hjælpe mig med at forstå hvad det er der gør problemet og helst give mig en løsning på problemet?
Avatar billede kalp Novice
14. marts 2007 - 13:37 #1
address og port skal begge være strings..

og ellers prøv at slukke firewall.

husk også at kalde close på ST.
Avatar billede Slettet bruger
14. marts 2007 - 14:45 #2
address og port skal da ikke være strings?

De skal være IPAddress og Int
Avatar billede Slettet bruger
14. marts 2007 - 14:47 #3
Og hvis du skal oversætte shute til Bytes er det nok nemmere at skrive

Enconding.ASCII.GetBytes("shute");
Avatar billede kalp Novice
14. marts 2007 - 14:48 #4
vrøvl.. ja port skal selfølgelig være int:)
men altså.. ingen grund til gætterier.. hvorfor ikke udskrive den exception??
Avatar billede Slettet bruger
14. marts 2007 - 14:50 #5
jep, mere info :)
Avatar billede sollie Nybegynder
14. marts 2007 - 20:13 #6
address skal være string og port skal være int. :-)

Men det er ikke mit problem.
Problemet er at hvis serveren ikke køre, som i visse tilfælde vi alle ved kan ske, ved f.eks. genstartning, eller bedre kendt nedbrud, så vil programmet i visual studio komme med en fejl som siger at masiknen direkte nægtede adgang og hvis det køres uden for et udviklings værktøj kommer en fejl op at programmet lavede en ulovlig handling og lukkes øjeblikeligt. Man kan sige på en måde at når det gælder om at oprette forbindelse til en server kan man lige så godt undlade at lægge koden ind i en try catch da det på mange måder har samme effekt. Simpelthen når klienten prøver at skabe forbindelse til en server skabes en fejl direkte med det samme og klient applikationen går fuldstændig ned.

Og angående firewallen så har jeg kørt klienten og serveren på samme maskine og den eneste firewall som er på den maskine er windows firewall som følger med windows xp og den har jeg aldrig kunne lide og derfor bliver den altid slået fra som standard.

Kort opsumering:

Der er ingen firewall kørende på maskinen og når klienten prøver at connecte til en server som ikke svare skabes en ulovlig fejl på maskinen og klienten lukkes automatisk af windows.

:-)
Avatar billede sollie Nybegynder
14. marts 2007 - 20:15 #7
En ting som jeg glemte at sige at den kode som jeg har vist i spørgsmålet er kun brugt til at se efter om serveren er oppe og køre. Dette er en funktion som jeg bruger i klienten af forskellige årsager, spørg venligst ikke hvorfor. :-)
Avatar billede Slettet bruger
14. marts 2007 - 22:09 #8
Hvilken execpton kommer den da med??
Avatar billede sollie Nybegynder
15. marts 2007 - 09:52 #9
Det som computeren/Visual studio fortæller mig, når den prøver at forbinde til en ikke aktiv/eksisterende server er:

"Der kunne ikke oprettes forbindelse, fordi destinationscomputeren aktivt nægtede det"

Derefter går programmet ned.
Og som sagt før så sker dette inde i en try catch block.

Jeg har prøvet dette med og uden en server kørende, begge applikationer køre lokalt på den samme maskine uden nogen form for firewalls.
:-)
Avatar billede sollie Nybegynder
15. marts 2007 - 09:52 #10
Jeg vil dog lige sige at hvis serveren dog køre fungere klienten fint.
Avatar billede Slettet bruger
15. marts 2007 - 12:36 #11
Øhh..

Du siger at den kommer med en normal windows app fejl, selvom du har det kørende i en try/catch???

Du siger at du prøver med både server kørende og ikke, og alligevel fejler den. Samtidigt siger du at hvis serveren kører fungere klienten fint???

Der er ikke rigtig noget af det der hænger sammen

Prøv at smide noget kode op
Avatar billede Slettet bruger
15. marts 2007 - 12:37 #12
Både der hvor du opretter forbindelse og der hvor du acceptere den
Avatar billede sollie Nybegynder
15. marts 2007 - 15:31 #13
Hvis jeg prøver at forbinde klienten til en maskine hvor serveren køre på og den kan få forbindelse, altså f.eks. ingen firewall eller andet er kørende til at forhindre en forbindelse, så fungere klienten fint.
Men hvis jeg prøver at forbinde klienten til en maskine hvor denne server ikke køre på. F.eks. hvis jeg prøver at forbinde til www.eksperten.dk som ikke køre denne server, fejler programmet, selv om at koden som forbinder klienten til serveren er i en try/catch. Hvis jeg f.eks. køre applikationen fra visual studio får jeg beskeden:

"Der kunne ikke oprettes forbindelse, fordi destinationscomputeren aktivt nægtede det"

Hvis jeg prøver at køre klienten direkte i windows, altså almendeligvis går ind og doblet klikker på .exe filen og prøver at forbinde til en maskine uden server applikationen så kommer en fejl op som spørger om jeg vil sende en fejl meddelse til microsoft eller lade være og applikationen, altså klienten, lukkes fuldsændigt ned.
Avatar billede herchin Nybegynder
15. marts 2007 - 20:34 #14
I hvilken linje fejler den?
Avatar billede Slettet bruger
16. marts 2007 - 09:22 #15
Du bliver nød til at poste noget kode før vi kan hjælpe dig..!
Avatar billede sollie Nybegynder
16. marts 2007 - 09:33 #16
Linjen den fejler i er den der er "TcpClient connection = new TcpClient(address,port)" i koden som er vist i toppen og vist her i denne kommentar.

public bool Connect()
        {
            bool canConnect = false;
            try
            {
                TcpClient connection = new TcpClient(address,port);
                canConnect = true;
                byte[] bytes = new byte[1024];
                string text = "shute";
                bytes = new ASCIIEncoding().GetBytes(text);
                Stream ST = connection.GetStream();

                connection.Close();
            }
            catch (IOException)
            {
                canConnect = false;
            }

            return canConnect;
        }
Avatar billede Slettet bruger
16. marts 2007 - 10:52 #17
Prøv at dubugge og skriv hvad IPaddress indholder og port, og hvorfor kalder du connection.Close() lige efter du er connected?
Avatar billede Slettet bruger
16. marts 2007 - 10:54 #18
øhm.. du siger at den fejler når den ikke kan connecte, det er da klart, du fanger kun IOExceptions når en fejl sker?


Brug:

catch (Exception)
{
    canConnect = false;
}
Avatar billede herchin Nybegynder
17. marts 2007 - 00:08 #19
http://www.thescripts.com/forum/thread233487.html

Prøv at læse hele problematikken igennem. Det nederste svar addresserer vist dit proble,
Avatar billede sollie Nybegynder
19. marts 2007 - 13:39 #20
Tak wb-freekil. Det var problemet i min kode.
Jeg havde kopieret en try catch fra et andet projekt og troede det virkede.
:-)

Hvis du lægger et svar får du dine points.

P.S. Undskyld ventetiden på denne kommentar, jeg har haft nogle andre ting at tænke på.
Avatar billede Slettet bruger
19. marts 2007 - 14:08 #21
svar :)
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