UDP Problem
Übersicht

MatheBetreff: UDP Problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
seit gestern hab ich mich mal an die Netzwerkbefehle von Blitz 3D gewagt ich wollte einen Chat programmieren der über einen Server funktioniert. Mein Konzept wie der Server reagiert ist schon fertig, aber jetzt komm ich zu meinen Problem. Die Clients sollen sich automatisch mit den Server verbinden, aber wie finde ich die IP-Adresse des Servers heraus. Was mir spontan eingefallen wäre ist eine Schleife so wie diese: Code: [AUSKLAPPEN] For A1 = 0 To 255
For A2 = o To 255 For A3 = 0 To 255 For A4 = 0 To 255 WriteLine ClientOut,"###" SendUDPMsg (ClientOut,IntgerIP(A1+"."+A2+"."+A3+"."+A4),OUT) Next Next Next Next Function IntgerIP(IP$) Local A1 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A2 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A3 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A4 = Int(IP) Return (A1 Shl 24)+(A2 Shl 16)+(A3 Shl 8)+A4 End Function Wenn ein Server eine Antwort zurück gibt meldet sich der Client dort automatisch mit Benutzername und Passwort an. Geht das nicht einfach? mfg. Matthias |
||
Windoof nein DANKE => ArchLinux ![]() |
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
damit wirst du keinen Erfolg haben. Die IP muss man einfach wissen... Du könntest sie aber auf einer Internetseite speichern und dann auslesen. Aber mit wildem drauflos-suchen findest du nix. MFG |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Soein Server, der dauerhaft an ist, sollte über eine Dynamische DNS verfügen. Du kannst bei verschiedenen Anbietern kostenlos soetwas einrichten lassen. Das verbindet einen Domain-name mit einem PC, indem ein Programm auf dem PC installiert wird, dass in bestimmten abständen die IP an den DynDNS-Anbieter sendet.
Im Prinzip kannst du dann mit allen Clients auf "irgendwas.no-ip.biz" oder ähnliche Seiten connecten, und hast so eine Verbindung zum Server. EDIT: Oder wie Starwar schon sagte ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmmm... dazu müsst ich, aber ins Internet zugreifen es soll, aber ein Lan Chat werden.
So jetzt hab ich eine gute Lösung gefunden und sie funktioniert auch einwandfrei. Client: Code: [AUSKLAPPEN] Function Sende_Anmeldung()
Local T1 = MilliSecs() Local LocalIP$ = DottedIP(HostIP(CountHostIPs (SystemProperty("username")))) Local P1% = Instr(LocalIP,".",1) Local P2% = Instr(LocalIP,".",P1+1) Local P3% = Instr(LocalIP,".",P2+1) Local P4% = Instr(LocalIP,".",P3+1) Local A1$ = Mid(LocalIP,1,P1-1) Local A2$ = Mid(LocalIP,P1+1,P2-(P1+1)) Local A3$ = Mid(LocalIP,P2+1,P3-(P2+1)) DebugLog A1+"."+A2+"."+A3+"...." For A% = 2 To 255 WriteLine ClientOUT,"###" SendUDPMsg (ClientOUT,IntgerIP(A1+"."+A2+"."+A3+"."+Str(A)),OUT) Delay 1 ;Lese die Antwort vom Server aus... Local SIntgerIP% = RecvUDPMsg(ClientIN) If SIntgerIP <> 0 Then Local ServerNachricht$ = ReadLine(ClientIN) If ServerNachricht = "###" Then Add_Server(SIntgerIP) EndIf Next Print MilliSecs()-T1 + "ms" WaitKey End Function Function IntgerIP(IP$) Local A1 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A2 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A3 = Int(Left(IP,Instr(IP,".")-1)) : IP = Right(IP,Len(IP)-Instr(IP,".")) Local A4 = Int(IP) Return (A1 Shl 24)+(A2 Shl 16)+(A3 Shl 8)+A4 End Function Function Add_Server(IntIP%) ss.Server = New Server ss\ServerStringIP = DottedIP(IntIP) ss\ServerIntgerIP = IntIP DebugLog "Server gefunden: " + ss\ServerStringIP End Function Server: Code: [AUSKLAPPEN] Repeat
Cls WaitTimer(Timer) IntgerIP = RecvUDPMsg(ServerIN) If IntgerIP <> 0 Then ClientNachricht = ReadLine(ServerIN) DebugLog ClientNachricht If Instr(ClientNachricht,"$200$",1) = 1 Then Benutzer_Anmeldung() ElseIf Instr(ClientNachricht,"$201$",1) = 1 Then ; BenutzerNamen_aendern() ElseIf Instr(ClientNachricht,"$202$",1) = 1 Then ; BenutzerPasswort_aendern() ElseIf Instr(ClientNachricht,"$203$",1) = 1 Then ; Benutzer_loeschen() ElseIf Instr(ClientNachricht,"$204$",1) = 1 Then ; BenutzerDaten_senden() ElseIf Instr(ClientNachricht,"###",1) = 1 Then WriteLine ServerOUT,"###" SendUDPMsg (ServerOUT,IntgerIP,OUT) EndIf EndIf ;WriteSystemNachrichten() Flip Until KeyHit(1) ;: ServerBeenden() Um den Server jetzt zu finden brauch ich > 550ms. Wenns ich es über einen Internet Server machen würde muss das Internet an sein und so gehts auch ohne Internet, leider musste ich Delay einfügen, denn ein Computer ist nicht so schnell um die Antwort unter 1ms zurück zuschicken... |
||
Windoof nein DANKE => ArchLinux ![]() |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso. Im Lan kannst du es auch per Broadcast machen, da es ja nicht sehr viele Adressen gibt, die du ansenden müsstest.
Wenn z.B. alle Computer im LAN die IP 192.168.2.X haben, dann kannst du ja einfach nur alle X durchgehen. Das wären dann 255 Nachrichten. EDIT: Bei LAN Partys würde ich es so wie oben machen. Bei kleinen Sachen mit 3 Freunden oder so reicht es doch die IP Manuell anzugeben ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im lan ist es kein problem, einfach einen Server-Melde-Dich-Broadcast zu senden, woraufhin der Server eine hier-bin-ich nachricht zurück schickt. | ||
Mathe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah okey, dann bin ich mit meiner Taktik schon recht weit.
@Tankbuster Theoretisch könnte man schon die IP eingeben, aber ich bin dafür zu faul und deshalb hab ich mir halt einen System überlegt, dass den Server automatisch findet. Der Client kann sogar unterscheiden, wenn mehrere Server im Netz vorhanden wären. mfg. Matthias |
||
Windoof nein DANKE => ArchLinux ![]() |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group