Portfreigabe für Client notwendig?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Hakkai

Betreff: Portfreigabe für Client notwendig?

BeitragMi, März 31, 2010 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe hier im Forum gelesen es sei nicht notwendig eine Portfreigabe für Clients zu machen, allerdings funktioniert es dann nicht mehr bei mir, auf diese Art:

Server startet, fest definierte UDP in/out port (IN-Port am Router freigegeben)
Client startet(generiert selbsständig UDP in/out port) -> schickt Daten(IN-port, name...) an Server
Server fängt diese Daten auf und weis wo er seine Antwort hinzuschicken hat.
Doch leider kommt diese Antwort nie beim Client an.

Wenn ich nun fest definierte Ports für Client und Server verwende von denen ich den IN-Port freigebe dann funktioniert alles.

Allerdings möchte ich das der Client selbst seine Ports wählt und diese nicht freigeben brauch, ist das irgendwie möglich?

Funktioniert nicht:
Code: [AUSKLAPPEN]

in_stream = CreateUDPStream()          ; Stream erzeugen und handle zurückgeben
out_stream = CreateUDPStream()
      
myinport = UDPStreamPort(in_stream)      ; Port ermitteln
myoutport = UDPStreamPort(out_stream)


Funktioniert:
Code: [AUSKLAPPEN]

Const cinport = 2002, coutport = 2003

in_stream = CreateUDPStream(cinport)    ; Stream erzeugen und handle zurückgeben
out_stream = CreateUDPStream(coutport)

myinport = cinport                  ; Port ermitteln
myoutport = coutport

Jo0oker

BeitragMi, März 31, 2010 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt nicht alles gelesen, aber nimm generell ports über 8800 oder so!

lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!

Hakkai

BeitragMi, März 31, 2010 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image
Danke für den Tip, aber für den Client kann mir das leider nicht weiterhelfen

Holzchopf

Meisterpacker

BeitragMi, März 31, 2010 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutze fürs Senden und Empfangen nur einen Stream (und somit einen Port). Denn nur so kann der Router /die Firewall beim Client wissen, dass die Nachricht vom Server auch wieder zum Programm geleitet werden muss.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Hakkai

BeitragFr, Apr 02, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe versucht eine Nachricht vom Clienten über den in_stream und in_port an den Server zu schicken und dieser dann wieder zurück, das hätte doch eigentlich klappen sollen !?

Leider klappt immernoch nur der Weg vom Client zum Server aber nicht zurück.
Gibt der Router den Port für den Client wirklich in jedem Falle frei wenn der Client über diesen an den Server sendet?
 

Lion

BeitragFr, Apr 02, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Sonst könnte er ja nichts darüber schicken...
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

TimBo

BeitragFr, Apr 02, 2010 23:46
Antworten mit Zitat
Benutzer-Profile anzeigen
While RecvUDPMsg hilft dir mit sicherheit weiter oder ?

Die IP bekommst du mit UDPMsgIP
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Holzchopf

Meisterpacker

BeitragSa, Apr 03, 2010 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
TimBo hat mich eben darauf aufmerksam gemacht, dass hier ziemlich wenig dreidimensionales abgeht - und dem kann ich nur zustimmen.

~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Hakkai

BeitragSa, Apr 03, 2010 1:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Lion hat Folgendes geschrieben:
Sonst könnte er ja nichts darüber schicken...


Wenn der Port freigegeben wurde müsste der Client doch aber auch über diesen Port empfangen können. Das geht aber nur wenn ich das manuell freigebe, was bei dem Client ja nicht der Sinn ist.

so läuft das gerade bei mir ab:
Client Sendet an Server über Port 9000 (OK)
Server empfängt die Daten (OK)
Server sendet über Port 9002 an den Client (OK)
Client empfängt die Daten (NOT OK)

Port 9000 freigegeben
Port 9002 nicht freigegeben

Gibt es evtl. Router die sich da irgendwie schwerer tun?

Habe da noch ein Verständnisproblem mit der Definintion: "man schickt über den Port"
bezieht sich der Port dabei auf den Port des Ausgangsstreames oder auf den Zielport?
SendUDPMsg Ausgangsstream, Zielip, Zielport
In Meiner Definition von oben beziehe ich mich nämlich auf den Zielport.

TimBo

BeitragSa, Apr 03, 2010 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
aha,

sende doch die Message an den Routerport 9000 (vom Empfänger), dann weiß der Router evtl. dass es sich hier um eine Antwort handelt.

Client sendet an Server (Port 9000 vom Server)
Server empfängt (müsste ja gehen , wenn beim Server 9000 freigegeben ist)
Server sendet an Client (Port 9000) zurück.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Hakkai

BeitragSa, Apr 03, 2010 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Server und Client mit dem gleichen Port? Dann kann ich das ja nicht mehr auf demselben Rechner testen.

Sollte schon Möglich sein, Server und Client auf einem Rechner parallel laufen zu lassen.

hier nochmal das Wichtigste:

Client Stream Port = 9002 (nicht freigegeben)
Server Stream Port = 9000 (freigegeben)

Client schickt an Server
1. SendUDPMsg Stream, localhost_int , 9000 (müsste hier nicht der Port 9002 vom Stream am Router aufgestoßen werden?)

2. Server fängt die Daten auf. (Klappt)

Server schickt an Client
3. SendUDPMsg Stream, localhost_int , 9002 (jedenfalls scheint der Port 9002 noch nicht auf zu sein)

4. Client fängt die Daten auf. (Klappt nicht)

Holzchopf

Meisterpacker

BeitragSa, Apr 03, 2010 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, genau so müsste es funktionieren Confused Vielleicht hast du einen Router, der intern und extern nicht die selben Ports benutzt. Versuch mal beim Server statt fix an die 9002 zu senden, an den Port zu senden, von dem die Nachricht kam... UDPMsgPort sollte afaik diesen Port zurückgeben.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Hakkai

BeitragSa, Apr 03, 2010 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
So hab das jetzt mal Minimiert um es euch testen zu lassen, wenn ihr Zeit habt natürlich.
Hier schickt der Client sich selber eine Nachricht, diese kommt aber auch nur an wenn der Port 9002 freigegeben ist, sonst nicht. Ist das bei euch auch so?

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
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)

   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 ////////////////////////////////////
 

Lion

BeitragSa, Apr 03, 2010 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir kommts an und ich habe Port 9002 nicht freigegeben... Liegt wohl an deinem router.
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Hakkai

BeitragSa, Apr 03, 2010 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei dir steht dann da: "Nachricht erhalten: Client gestartet" ???

N0X

BeitragSa, Apr 03, 2010 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir auch!

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

tft

BeitragSa, Apr 03, 2010 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

du must es getrennt angehen. Wenn du auf dem Gleichen Rechner Server und Client benutzen willst. Must du die Ports zum senden und Lesen nur eine Portnummer getrennt verwenden. Der Router wird innerhalb des eigenen und des LAN Netzwerkes alles was freigegeben ist. auch durchlassen.
Wenn du aber möchtest das du auch übers internet eine Verbindung aufbauen möchtest. Dann muss der Client die Daten über den Port X anfordern. Und der Server diesen auf dem selben wider zurück schicken. Da sonst der Router nicht unterscheiden kann ob die Daten angefordert wurden oder nicht. Sowie zu welchem Rechner die daten sollen. Denn offt hat man ja einen WLan router der die Datenpackete auch nochmal intern verschickt. Er kann ja bei den eingehenden Daten nicht sehen wo sie hin sollen. Zumindestens nicht wenn man Blitz benutzt.

Ich selber habe auch schon fiele möglichkeiten versucht. Aber es gibt immermal welche die nicht funktionieren. Du must prüfen welche verbindungen funktionieren. und welche nicht. und zur not muste eine Relaes Station zwischen schalten.

Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

BtbN

BeitragSa, Apr 03, 2010 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du auf dem PC auf port 9002 horchst, kann der router diesen Port nach aussen hin ändern. z.B. wenn ein anderer Rechner schon 9002 belegt hat, oder er einfach zufällig ports nutzt, um traversing zu verhindern.

Einfach immer an den Port zurück schicken, von dems kam. Und Clienten immer random ports geben, die müssen keinen fixen port haben, und sollten das auch nicht.

Hakkai

BeitragSa, Apr 03, 2010 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, scheint wohl unmöglich mit dem Router hier zu sein, schade.
So kann man wirklich nicht arbeiten Crying or Very sad Crying or Very sad

Mach ich meinen Chat halt nur fürs LAN ...

Weis jmd. welche Einstellung am Router das Problem verursachen könnte?
NAT vieleicht? Mein Vater hat wohl irgendwie gemeint, das das bei uns etwas fehlkonfiguriert sei.
 

Lion

BeitragSa, Apr 03, 2010 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei meinem Router steht das Port mapping unter NAT, kann also durchaus daran liegen, ja.
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group