Avatar billede mbm2016 Nybegynder
05. december 2009 - 21:48 Der er 12 kommentarer og
1 løsning

C++ Winsock - Send og modtag data

Hej eksperter,

Jeg har lige brugt nogle timer på at sætte mig ind i WinSock2, og jeg har så lavet henholdsvis en ServerSocket klasse, og en ClientSocket klasse.

I mit hjemmenetværk kan jeg så komunikere via mit program og mine klasser, men mit problem er at hvis jeg gerne vil have mit program til at snakke sammen med en af mine venners computer, hvordan gør jeg så det?

Når dette problem er løst er målet så at kunne lave et chat room. Jeg har ikke brug for kode, men noget pseudo noget, altså en forklaring på hvordan man kan gøre.

På forhånd mange tusinde tak

Magnus
Avatar billede arne_v Ekspert
05. december 2009 - 21:51 #1
Der er ikke forskel på kode som snakker med en anden computer som står 50 cm ved siden af din og så en computer som står på den anden side af jorden.

Det er stadig IP adresse og port der bruges til addressering.

Men hvis du connecter så skal du connecte til hans eksterne IP adresse (på ydersiden af hans firewall/NAT router) og han skal have lukket op for den port der bruges og han skal forwarde den port til hans PC.

Omvendt hvis han connecter.
Avatar billede mbm2016 Nybegynder
05. december 2009 - 21:56 #2
Nu har jeg fundet min ip adresse, og sidder nu med en arbejds pc med en helt anden ip adresse. Men jeg må indrømme at jeg er taknemmlig for din pseudo forklaring, lige bortset fra at jeg overhoved ikke forstod den.

Som sagt er jeg lige begyndt på WinSock programmering og jeg havde ikke i min vildeste fantasi forestillet mig at det kunne/skulle være så svært at forstå, det du skrev. Så jeg bliver nok nød til at omformulere mig, jeg har vidst brug for helt præcise kode forklaringer i c++.

På forhånd mange tak
Avatar billede arne_v Ekspert
05. december 2009 - 22:06 #3
Det jeg siger er at det slet ikke har noget med C++ at gøre.

Hvis du har et client program og et server program som kan snakke sammen på et lokal netværk, så skal der ikke ændres noget i koden for at de kan snakke sammen over internettet. Det er kun et spørgsmål om at bruge de rigtige IP adresse, åbne op i firewalls, forwarde i NAT routere etc..
Avatar billede mbm2016 Nybegynder
06. december 2009 - 13:10 #4
Ja så meget ahr jeg forstået ;)

Men jeg ved ikke hvordan jeg åbner op i firewalls, forwarder i NAT routere etc.

Jeg ved ikke hvordan MSN gør men det er præcis hvad jeg har intentioner om at lave.

På forhånd tak
Avatar billede arne_v Ekspert
06. december 2009 - 16:34 #5
Du starter din browser angiver URL på management interfacet i den og konfigurerer den som du vil have.

Alternativet er teknikker a la:
  http://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197.html
Avatar billede mbm2016 Nybegynder
12. december 2009 - 14:26 #6
Nu har jeg en kode hvor jeg forbinder til min stationære som samtidig kører mit server program som lytter på Ip 0.0.0.0 port 666, jeg er nu på min bærbar og prøver at forbinde til 83.126.78.10 som er vores netværks adresse, som alle vores computere har. Men det jeg får af vide på min bærbar(klienten) er: Kan ikke forbinde til server 83.126.78.10 på port 666

Jeg har endda prøvet at slå firewallen helt fra på min staionære men det hjælper ikke.

Og et andet spørgsmål jeg heller ikke synes besvaret på det gode link du sendte mig, er hvordan, når man forbinder til min stationære ip adresse som jo indeholder flere computere inde under hjemmenetværket. Hvordan finder den ud af hvilken computer beskeden skal sendes til?
Avatar billede arne_v Ekspert
12. december 2009 - 15:04 #7
Er 83.126.78.10 ikke din eksterne IP adresse ?

Jeg vil da tro at dine LAN adresser er 192.168.x.x eller 10.0.x.x !
Avatar billede mbm2016 Nybegynder
12. december 2009 - 20:38 #8
jo jeg kunne bare ikke differentiere mellem Lan adresser og eksterne ip adresse før du skrev det og så googlede jeg det.

Men jeg forstår stadig ikke hvorfor det ikke virker nå jeg åbner mit client program på en computer med en anden ekstern ip adresse end min staionære, åbner mit client program hvori jeg prøver at forbinde til min staionæres eksterne adresse 83.126.78.10

Som sagt har jeg midlertidigt slået firewall'en fra, men min klient siger bare at den ikke kunne forbinde: Socket error = Couldn't connect!

På forhånd mange tak
Avatar billede arne_v Ekspert
12. december 2009 - 20:44 #9
Hvis det er over LAN skal du bruge dine LAN adresser ikke de eksterne IP adresser.
Avatar billede mbm2016 Nybegynder
13. december 2009 - 11:20 #10
Det er ikke over LAN da min bærbar er en computer fra arbejdet, og har en anden ekstern IP.

Men det jeg gerne ville var at kunne lave min stationære om til en chat server, som alle (Også mine venner) kunne oprette forbindelse til via min staionæres eksterne ip adresse. Og det er så det jeg har prøvet men jeg får som sagt den der irreterende meddelelse hele tiden:
Socket error = Couldn't connect!

Og med hensyn til det med LAN adresser, så kan jeg sige at det virke helt perfekt når jeg bruger computernes LAN adresser.

Jeg er bare en smule frustreret ;(

PÅ forhånd mange tak for hjælpen
Avatar billede arne_v Ekspert
13. december 2009 - 21:34 #11
En ekstern IP afhænger ikke af maskinen men af hvor maskinen er placeret.

Hvis maskinerne begge står hjemme hos dig, så skal du connecte til deres interne/LAN IP.

Hvis de står forskellige steder skal du connecte til den eksterne/WAN IP og lukke op & forwarde i firewall/router.
Avatar billede mbm2016 Nybegynder
29. april 2010 - 21:02 #12
Læg et svar arne ;)
Avatar billede arne_v Ekspert
29. april 2010 - 21:28 #13
ok
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
Kurser inden for grundlæggende programmering

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