![]() |
Automatisches Verbinden eines Programm über Netzwerk
Ich möchte ein Programm (Spiel) schreiben, dass man über Netzwerk spielen kann. Dafür sollen sich die beiden Programme selber finden und eine Verbindung herstellen, ohne dass man die IPs oder Namen der PCs eingeben muss. Spieler Eins erstellt also ein neues Spiel, und Spieler Zwei kann dann in einer Liste das Spiel auswählen und beitreten. Wie kann ich diese automatische Suche und Verbindung realisieren?
|
Re: Automatisches Verbinden eines Programm über Netzwerk
geht nur im LAN über broadcasts.. im internet definitiv nicht ohne hauptserver der bekannt ist über IP oder NAME
|
Re: Automatisches Verbinden eines Programm über Netzwerk
Will ich auch nicht übers Internet. Wie geht das mit diesen Broadcasts? Was ist das? Ich habe so etwas noch nie gemacht, kenn mich damit nicht aus, wollts aber mal ausprobieren.
|
Re: Automatisches Verbinden eines Programm über Netzwerk
über UDP kannste broadcasts an die ip 192.168.0.255 z.b. pakete schicken die gehen dann an jeden pc von 192.168.0.1 bis 192.168.0.254
wenn du in einem anderen netzwerk bist musst du halt die ip entsprechend abändern automatisch.. ODER du sendest UDP pakete an die 255.255.255.255 dann geht das an echt jeden pc im lan der eine gültige IP besitzt UDP pakete kannst du entweder mit den indy componenten ( UDP CLIENT ) machen oder mit den fastnet tools im delphi ich denke für beide anwendungen kriegste hilfe @ DP wenn du suchst |
Re: Automatisches Verbinden eines Programm über Netzwerk
Also ich hab einfach eine Schleife genommen und dann von 0-255 einfach eine Meldung rausgejagt. Sollte ich dass vielleicht nur von 1-254 machen? Hab bis jetzt TServerSocket und TClientSocket verwendet.
|
Re: Automatisches Verbinden eines Programm über Netzwerk
broadcasts sind schneller da sie mit einer zieladresse an ALLE pcs GLEICHZEITIG gehen.. also nix mit schleife in der netzwerkkarte oderso ;)
benutz UDP zum bekanntmachen der server bzw des clients.. also client sendet udp string raus.. und wenn der server den vor die nase kriegt sollte der server nen udp paket zurück senden an den client ( ONLY ) und dann weis der client die ip vom server dank der ursprungs adresse und dann kann der client über TCP zum server connecten und ab gehts |
Re: Automatisches Verbinden eines Programm über Netzwerk
So hatte ich das auch gemacht, halt nur mit Schleife. Also ich werd jetzt mir noch mal daran die Finger wund tippen und mich dann mal wieder mit einer Statusmeldung melden.
|
Re: Automatisches Verbinden eines Programm über Netzwerk
Also bis jetzt klappt das echt wunderwar! Ist zwar noch nicht ganz fertig, aber sollte jetzt kein Problem mehr sein. Vielen Dank!
|
Re: Automatisches Verbinden eines Programm über Netzwerk
no problem :)
hast es mit UDP gemacht? |
Re: Automatisches Verbinden eines Programm über Netzwerk
Mit 192.168.0.255 funktioniert es, wenn ich aber 255.255.255.255 angebe, findet er nichts. Warum nicht? Muss ich dabei noch etwas beachten?
|
Re: Automatisches Verbinden eines Programm über Netzwerk
Zitat:
ohne die Information über die IP-Adresse und die SubnetzMaske des Rechners wirst Du es nie "perfekt" machen können ;-) Denn von diesen beiden hängt die Broadcast-Adresse ab. z.B: RechnerIP : 192.168.1.5 SubNetzamsk : 255.255.255.0 (Class-C) Dann ist die: "Netzadresse" : 192.168.1.0 Broadcastadresse : 192.168.1.255 aber jetzt sieht es schon ganz anders aus: RechnerIP : 192.168.1.150 SubNetzamsk : 255.255.255.240 (Subnetting von Class-C) Dann ist die: "Netzadresse" : 192.168.1.144 Broadcastadresse : 192.168.1.159 Du solltest also IP-Adresse und Subnetzmaske rausfinden und daraus dann die Broadcastadresse erechnen. :stupid: |
Re: Automatisches Verbinden eines Programm über Netzwerk
Ich sehe jetzt keinen Zusammenhang zwischen den ganzen Adressen. Und was ist die "Netzadresse"?
Wie bekomme ich die Subnetzmaske raus? |
Re: Automatisches Verbinden eines Programm über Netzwerk
Zitat:
ich versuche es mal zu beschreiben. Eine IP-Adresse besteht aus vier Oktetten. Zum Beispiel:
Code:
Die IP-Adresse ist in zwei Teile unterteilt, um einen Host lokalisieren zu können. Das System kann damit feststellen, von welchem System ein Paket stammt oder an welches System das Paket geschickt werden muss. Wie die Telefonnummer, die aus einer Vorwahl und einer spezifischen Telefonnummer besteht, gibt es auch bei der IP-Adresse einen Teil, der das Netzwerk kennzeichnet, in dem das System enthalten ist und einen zweiten Teil, der den Host kennzeichnet.
Dezimal 192 . 168 . 1 . 1
Binär 11000000 . 10101000 . 00000001 . 00000001 Welcher Teil der gesamten Adresse jetzt die Netzwerkadresse und welcher die Hostadresse ist wird durch die Subnetzmaske bestimmt. Alle Bits der IP-Adresse die mit der Subnetzmaske übereinstimmen ergeben die Netz-Adresse. Dies kann durch eine einfache AND verknüpfung gemacht werden.
Code:
IP-Adresse:
Dezimal 192 . 168 . 1 . 1 Binär 11000000 . 10101000 . 00000001 . 00000001 Subnetz-Maske Dezimal 255 . 255 . 255 . 0 Binär 11111111 . 11111111 . 11111111 . 00000000
Code:
11000000 . 10101000 . 00000001 . 00000001
AND 11111111 . 11111111 . 11111111 . 00000000 ----------------------------------------- 11000000 . 10101000 . 00000001 . 00000000 = 192.168.1.0
Code:
In diesem Beispiel besteht die Netzadresse also aus den ersten drei Oktetten der Gesamt-IP während die Hostadresse aus dem letzen Oktett besteht.
<-------- Netzadresse -------> <-Host->
11000000 . 10101000 . 00000001 . 00000001 Die Broadcastadresse eines Netzes ist jene bei der alle Bits der Hostadresse = 1 sein. Die wäre also in diesem Fall
Code:
<-------- Netzadresse -------> <-Host->
Binär 11000000 . 10101000 . 00000001 . 11111111 Dezimal 192 . 168 . 1 . 255 Rechnerich kannst Du das so ermitteln: Netzadresse := IP-Adresse AND Subnetzmaske; Broadcastadresse := Netzadresse OR (NOT Subnetzmaske); Dies wäre der sicherste Weg die Broadcast-Adresse zu ermitteln. Es gibt noch eine einfachere Methode die aber kein Subnetting berücksichtigt: Dafür brauchst Du nur die oberen Bits des ersten Oktetts auszuwerten. Dabei gilt folgende Regel:
Code:
Uff... ich hoffe das ist einigermassen zu verstehen. Wenn nicht -> Fragen ;-)
0XXXXXXX -> Klasse-A Netzwerk (Broadcast = X.255.255.255)
10XXXXXX -> Klasse-B Netzwerk (Broadcast = X.Y.255.255) 110XXXXX -> Klasse-C Netzwerk (Broadcast = X.Y.Z.255) |
Re: Automatisches Verbinden eines Programm über Netzwerk
das ist mal ne klasse antwort,
danke sharky :thuimb: raik |
Re: Automatisches Verbinden eines Programm über Netzwerk
Ich denke mal, ich habe es so weit verstanden, wie ich es brauche.
Fragen: 1. Wie komm ich an die Subnetmask? 2. Um die Netzadresse auszurechnen, zerlege ich die IP und die Subnetmask in die vier Einzelteile, wandel sie in Binärzahlen um, rechne die Einzelnen Teile mit AND aus. Dann mache ich das gleiche nochmal nur mit OR NOT und setzte alles zu der Broadcast-Adresse zusammen. Hab ich das richtig verstanden? Bevor ich mich da in was verrenne, was total falsch ist. 3. Gibt es den Code nicht irgendwo, das hat doch sicher schon mal jemand gemacht und wird öfters genommen, oder? |
Re: Automatisches Verbinden eines Programm über Netzwerk
Hai Gydan,
zerlegen musst Du sie nicht. Hast Du zufällig die JVCL-Installiert? Wenn ja schaue Dir mal das ![]() Wie die Subnetzmaske ermittelt wird wurde hier schon öfters gefragt glaube ich. Suche einfach einmal |
Re: Automatisches Verbinden eines Programm über Netzwerk
Ich habe keine JVDL installiert. Kenn ich auch nicht.
Wegen der Subnetzmaske hab ich noch nichts gefunden, werde abe noch mal gucken. |
Re: Automatisches Verbinden eines Programm über Netzwerk
Ich werde jetzt mal die Tipps von
![]() ![]() Aber wie rechne ich die in die Broadcast-Adresse um? Es ist doch ein String, und zum rechnen brauche ich Binärzahlen, wie mache ich das? |
Re: Automatisches Verbinden eines Programm über Netzwerk
Zitat:
z.B. 192.168.1.5 = (192 * 255^3) + (168 * 255^2) + (1 * 255^1) + (5 * 255^0) |
Re: Automatisches Verbinden eines Programm über Netzwerk
Hi!
Wie du sie ausrechnen kannst, hat sharky ja mehr oder weniger beschrieben, du musst nur den String an den Punkten zerschnipseln und dann damit weiterrechnen (natürlich vorher strtoint(strtofloat)). Ciao fkerber |
Re: Automatisches Verbinden eines Programm über Netzwerk
Ok, ich denke mal, dass ich das jetzt alles hinbekommen werde. Danke an alle die so geduldig waren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz