Portfreigabe für Client notwendig?
Übersicht

![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fast alle router haben Hole Punching an, da sollte kein Problem sein. Das Problem liegt eher in deinem Programm. | ||
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, aber wenn es am Programm lege würde es ja bei euch auch keine Nachricht empfangen ohne Portfreigabe. Hatte den kurzen Code doch testweise reingestellt. | ||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zum dritten mal: Schicke die Nachricht nicht konstant an Port 9002, sondern an den Port, der dir UDPMsgPort![]() Ich hoffe, du hast auch BtbNs Beitrag nicht überlesen. mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich überlese keine Nachrichten, hab das schon getestet gehabt und hat alles nicht funktioniert...
hier das abgeänderte Beispiel mit mystream = CreateUDPStream() cport = UDPStreamPort(mystream) Die Nachricht kommt bei mir nachwievor nicht an. Im Lan funktioniert das, im Internet hingegen nur mit Freigabe und festen Port. Code: [AUSKLAPPEN] ; Graphical Variables
Global resolution_x = 200, resolution_y = 100, graph_depth = 32, graph_mode = 2 ; Create Graphics Graphics3D resolution_x, resolution_y, graph_depth, graph_mode SetBuffer BackBuffer() ; DoubeBuffering ; Variable ;Const cport = 9002 Global cport Const idsendmsg = 1 Local frametimer = CreateTimer(60) ; 60 FPS (Bilder pro Sekunde) Global myip_dot$: network_getip(): DebugLog "Meine I-Net IP: " + myip_dot$ Global nachricht$ Global menu = 1 Global mystream Global myip_int = network_intip(myip_dot$) ; Functions //////////////////////////////////// Repeat ; Anfang der Hauptschleife AppTitle "Client test" Select menu Case 1: main() ; schreibe Nachricht in den Stream Case 2: network_read_data() ; lese aus dem Stream End Select WaitTimer(frametimer) ; wir wollen 60 FPS nicht mehr Flip(0) Cls If KeyHit(1) Then system_clean_up() Forever ; Functions //////////////////////////////////// Function main() mystream = CreateUDPStream() cport = UDPStreamPort(mystream) Local tmp_msg$ = "Client gestartet" nachricht$ = "Schicke mir selber eine Nachricht..." network_write_data( idsendmsg, "Client gestartet", myip_int, cport) DebugLog nachricht$ menu = 2 End Function ; Functions //////////////////////////////////// Function network_write_data( datatype, msg$, to_ip, to_port ) Select datatype Case idsendmsg: WriteInt(mystream, idsendmsg) WriteString(mystream, msg$) End Select SendUDPMsg mystream, to_ip, to_port End Function ; Functions //////////////////////////////////// Function network_read_data() Local tmp_msg$ = "" Local tmp_ip = 0 Local tmp_port = 0 Local ip_rec_int = RecvUDPMsg(mystream) ; lese die Nachricht mit read, return ist senderIP Local rec_port = UDPMsgPort(mystream) If ip_rec_int nachricht$= "Neue Nachricht von Port: " + rec_port DebugLog nachricht$ idc = ReadInt(mystream) If idc = idsendmsg Then ;erhalte: Nachricht tmp_msg$ = ReadString(mystream) nachricht= "Nachricht erhalten: " + tmp_msg DebugLog nachricht$ EndIf EndIf End Function ; Functions //////////////////////////////////// Function network_intip(IP$) a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a4=Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4 End Function ; Functions //////////////////////////////////// Function system_clean_up() If mystream Then CloseUDPStream(mystream) End End Function ; Functions //////////////////////////////////// Function network_getip() ; lese wieistmeineip.de in myip ein Local webserver$ = "www.meineipadresse.de" Local webpath$ = "meine_ip.php" Local tmp_msg$ Local tmp_sip_dot$ Local tmp_status$ Local tcp ;Verbinde zur Webseite tcp = OpenTCPStream( webserver$, 80 ) If Not tcp Return 1 ;-> connection fehlgeschlagen EndIf ;Lese Meine Internet IP WriteLine tcp, "GET http://" + webserver$ + "/" + webpath$ + " HTTP/1.0" WriteLine tcp, "" If Eof( tcp ) Return 1 ;-> connection fehlgeschlagen Else While Not Eof(tcp) ;lese nun das Vz aus tmp_msg$ = ReadLine$(tcp) ;DebugLog(tmp_msg$) t = Instr(tmp_msg$, "<B>", 1) If t > 0 s = Instr(tmp_msg$, ";", t) e = Instr(tmp_msg$, "<", s) tmp_ip_dot$=Mid( tmp_msg$, s + 1, e - s -1 ) Exit EndIf Wend EndIf CloseTCPStream tcp myip_dot$ = tmp_ip_dot$ End Function ; Functions //////////////////////////////////// |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
UDPStreamPort![]() Der Server kennt den Port des Clienten erst, wenn er eine Nachricht von diesem erhält. Denn erst dann kann der Server den Port des Clienten mittels UDPMsgPort ![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich das richtig sehe, dann mach ich das doch in dem Beispiel von oben. | ||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich das richtig sehe, machst du mit Code: [AUSKLAPPEN] Local rec_port = UDPMsgPort(mystream) ausser Debuglogen nix.
|
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, aber bei dem Teil:
Code: [AUSKLAPPEN] Local ip_rec_int = RecvUDPMsg(mystream) ; lese die Nachricht mit read, return ist senderIP Local rec_port = UDPMsgPort(mystream) If ip_rec_int nachricht$= "Neue Nachricht von Port: " + rec_port DebugLog nachricht$ ... erhalte ich diese: "Neue Nachricht von Port ..." nur dann wenn ich den Port fest definiere und freigebe. Das war ja alles was ich in dem Programm testen wollte. Nehme mal an das das soweit stimmig ist und es bei mir hätte funktionieren sollen, ohne freigabe und feste Definition des Ports. |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab' eben aus Freude n kleines Beispiel geschrieben, wo gezeigt wird, wie der Server beim Empfang der ersten Nachricht die Daten des Clients bestimmt:
BlitzBasic: [AUSKLAPPEN] Graphics 400, 300, 0, 2 Kleiner geht's fast nicht. Netzwerk-Sachen sind eben immer aufwändige Sachen =/ mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weis zwar noch nicht warum aber ich werde es bald rausfinden, warum das Beispiel von dir bei mir läuft.
Danke. Edit: ===== Ich muss mich korrigieren, ich war der Meinung es klappt, aber es funktioniert wie bei mir nur in eine Richtung. Der Server bekommt die Nachricht vom Client aber nicht andersrum. Wenn der Server versucht an den Client zu senden bekommt der Server die Nachricht 2 mal, einmal normal als lokale Nachricht und einmal auf seinen Port. Das gleiche Phenomen habe ich mit meinem großen Programm, wo ich Server und Client getrennt starten kann. 2. Edit ===== Das Problem gibt es aber auch hier nur mit InternetIP's, bei Lan-Ips funktioniert alles wie es soll. |
||
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich teste beides auf meinem Rechner, dabei bin ich hinter einem Router. Wollte es demnächst mit einem 2. Rechner versuchen, aber wenn du schon sagst der Server darf sich nicht hinterm Router befinden, kann ich mir das wohl spaaren.
Also ist das Internetgedöhns nur Möglich mit einem Server der nicht am Router hängt? |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir geht das auch wenn beide hinterm Router hängen.
Nur der Server muss einen Port freigeben. |
||
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
@count-doku: kannst du mal bitte das Programm von Holzschopf ausprobieren, im Client deine InternetIP von http://www.wieistmeineip.de/ eintragen und schauen ob die Nachrichten die der Server schickt beim Client ankommen und andersrum.
Wenn das bei dir geht, dann muss es an meinem Router liegen. |
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hakkai, hab ich gemacht und geht ![]() Ich hab auch selbst ein Chat programmiert, der läuft auch. |
||
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich habe den Fehler jetzt mit ziemlicher Sicherheit gefunden und zwar durch rumprobieren.
myport = 9000 to_port = 9000 mystream = CreateUDPStream(myport) ... SendUDPMsg mystream, to_ip, to_port solch eine Konstellation verärgert meinem Router scheinbar. Er macht den Port für eine Weile dicht, wenn der selbe Port über und an sich selber eine Nachricht schickt. Also wenn ich als Server oder Client mir über das Netz selber eine Nachricht zuschicken will. Danke nochmal für das Beispiel Holzchopf, hat mir sehr geholfen den Fehler doch noch zu finden. Nun muss ich erstmal warten bis meine ganzenz Ports wieder freigemacht werden ![]() ![]() |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du es lokal auf deinem Rechner testen willst, solltest du als IP "127.0.0.1" nehmen. Also falls du das meinst. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne, war nicht gemeint. Es ging um Internet und Ports, nicht um Lokal und IP's ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nochmal: Bis auf den Server-Port ALLE ports random und durch auslesen des Message-Ports bekommen. Server-Port fest. Nur ein Socket pro teilnehmer. Auch der Server nur einen. Sonst nix. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group