Server und Client auf dem gleichen Computer

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

ja der client stellt eine verbindung zum server her und dann sendet der server zb. eine datei zu dem angegebenen client (clientEvent() oder so)

Wenn dass mit ClientEvent beim Server nicht geht sag ich euch nochma bescheid.


Achso bei 127.0.0.1 vermute ich dass die verbindung garnicht erst aus dem Computer heraus geht sondernim computer bleibt und nur so außsieht als geht die raus. Vermute ich aber nur.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

#NULL hat geschrieben:ich hab so das gefühl, dass einige nicht zu lesen scheinen was andere hier schreiben.....
Ja ich schreib was(bin so lam)(lahm mein lieblings Fußballspieler :D ) und dann wenn ichs Posta sehe ich das in der zwischenzeit aschon wieder 3 leute was anderes gepostet haben :mrgreen:
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

127.0.0.1 ist die sogenannte "Loopback-Adresse". Alle Netzwerkkarten sind so genormt, dass sie bei Angabe dieser IP "zu sich selber" zurückrouten, also daran kann es nicht liegen. Ich habe schließlich auch schon mehrere Sachen ausprobiert (u.A. Shoutcast-Winamp Streaming und da musste ich auch dem Winamp-Plug-In sagen, dass der Streamserver auf demselben Rechner läuft.
Also an den Networkbefehlen kanns nicht wirklich liegen, ad das alles hardwareintern läuft, und somit für das Programm an sich nicht weiter "andersartig" ist als ein Programm das wirklich nach Außen sendet.

Aber damit andere Leute connecten können, muss der Port geforwarded sein. Das geht i.d.R. mit dem Webinterface des Routers.

Warum das mit ICQ geht kann ich dir recht einfach erklären:
In dem Fall versucht nämlich der ICQ-Client den ICQ-Server zu kontaktieren. (Die Erklärung von NTQ war übrigends ziemlich gut mit den Viren :allright: )
Der Router registriert das in seiner internen Tabelle, dass ICQ auf Port sowieso mit IP sowieso mit dem Server verbunden werden möchte und speichert das. Wenn der Server jetzt antwortet, guckt der Router vorher nach, wer geantwortet hat-
"AH, der ICQ- Server- der PC 192.168.1.4 wollte doch gerade was von dem... mh, OK, Port sowieso, da hatte der CLient auch drauf angefragt- ist genehmigt, gebe ich weiter.."

Kommt jetzt aber ein Hacker o.Ä., der versucht sich mit irgendeinem Port deines Rechners zu verbinden, ohne das ein Client die Anfrage gesendet hat, so weiß der Router nicht, an welchen PC im Netzwerk er das Paket schicken soll. (Aneinem Router sind ja meistens mehrere gleichzeitig) Also verwirft er das Paket- sogesehen ist das also garkein gewolltes Feature, sondern eine technische Unmöglichkeit (It's not a bug- it's a feature!).
Sagst du deinem Router jetzt im Webinterface, dass du port 987 forwarden willst, dann musst du einmal den Port einstellen, und die lokale IP, an den das Paket gesendet werden soll. Wenn jetzt ein Client von Außen versucht auf deinen PC zu connecten, so guckt der Router nicht mehr in seine Tabelle, sondern schickt es lediglich stumpf an die Angaben, die du hinterlegt hast.
Nachteil: Hast du 2 PCs am gleichen Router, und willst 2 mal den GLeichen Server starten, so musst du 2 verschiedene Ports für die jeweiligen PCs angeben, weil du kannst ja immer nur eine IP pro Port angeben, an die der Router seine Empfangsdaten senden soll- logisch, oder?

Ich hoffe ich habe fürs Erste zur einem kleinen "Ah"-Gefühl beigetragen, und damit eurer Logik auf die Sprünge geholfen ;)

Was das Port-Forwarden per Automatik angeht: Das geht! Es gibt ein Protokoll, über das die Einstellungen von einem PC zum ROuter übertragen werden können. Das ist aber in den meisten Routern deaktiviert, da ja sonst auch Viren diesen Befehl einfach senden könnten, um den PC angreifbar von außen zu machen. Außerdem gab(gibt?!) es ist in diesem Dienst schon immer leichte Tricks um Sperrmechanismen zu umgehen- also ist dieser Ansatz eher unpraktikabel..

Gr33tz
Tafkadasomk5 :allright:

Edit: Und jetzt fällt mir gerade der Name für das "Router-Einstell"- Protokoll ein: UPnP (Universal Plug'n'Play)
Azureus unterstützt das zum Beispiel um Torrent-Nutzern das Konfigurieren zu vereinfachen, da auch 2 Ports geforwarded werden müssen, um "full speed" erreichen zu können.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Tafkadasom2k5 hat geschrieben: Warum das mit ICQ geht kann ich dir recht einfach erklären:
In dem Fall versucht nämlich der ICQ-Client den ICQ-Server zu kontaktieren. (Die Erklärung von NTQ war übrigends ziemlich gut mit den Viren :allright: )
Der Router registriert das in seiner internen Tabelle, dass ICQ auf Port sowieso mit IP sowieso mit dem Server verbunden werden möchte und speichert das. Wenn der Server jetzt antwortet, guckt der Router vorher nach, wer geantwortet hat-
"AH, der ICQ- Server- der PC 192.168.1.4 wollte doch gerade was von dem... mh, OK, Port sowieso, da hatte der CLient auch drauf angefragt- ist genehmigt, gebe ich weiter.."

Genau und die Idee mit dem Server hatte ich auch bevor ich wusste das das ICQ auch so macht. Ich probiers mal aus und infomier euch wieder rechtzeitig ob klappt oder nicht.


Jetzt muss ich nur noch warten bis der eine Typ mir die Daten für den Server gibt und mir das freischaltet, der brauch lang! Und das programmieren
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

HI,

Also ich hab mal was ansprobiert, ein Programm Sendet einen string an einen anderen computer, der Computer Sendet wieder einen string zurück und bei mir kommt ein Textmeldung nur das klappt nicht.


Programm auf meinem Computer dass den string Versendet:

Code: Alles auswählen

;---------Vorbereiten Init, Alocate, start usw.---------------

Port = 6832

If InitNetwork() = 0
  MessageBox_(Win,"Netzwerk Umgebung kann nicht vorbreitet werden!"+Chr(13)+"Ist dein Computer Internet Tauglich?","Warnung",#MB_OK | #MB_ICONERROR)
  End
EndIf



;-------------Endlosschleife, bis was passiert-----------------------

If CreateNetworkServer(1, Port , #PB_Network_TCP)

ConnectionID = OpenNetworkConnection("84.89.30.24", Port, #PB_Network_TCP)
If ConnectionID
SendNetworkString(ConnectionID, "Hi")

Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
      ;-------------case 1,2,3,4---------------------------------------
      
      
      
        Case 1
          ;MessageRequester("Server", "Ja er hat sich gemeldet", 0)
  
  
        Case 2
         MessageRequester("Server", "Ja er hat sich gemeldet", 0)


       Case 3
       DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$, Pattern$, Pattern)
       If DateiName$

       
       
       
       
       ReceiveNetworkFile(ClientID, DateiName$)
       
       EndIf 
      
       Case 4
       MessageRequester("Server", "Die verbindung zum Client wurde getrennt!", 0)
       
       
       
       
       
       

       
       
       
       
       
EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  EndIf 

End   

Programm auf dem Computer der den string empfängt und eien string an mich weider zurücksendet:

Code: Alles auswählen

Port = 6832

If InitNetwork() = 0
  MessageBox_(Win,"Netzwerk Umgebung kann nicht vorbreitet werden!"+Chr(13)+"Ist dein Computer Internet Tauglich?","Warnung",#MB_OK | #MB_ICONERROR)
  End
EndIf



;-------------Endlosschleife, bis was passiert-----------------------

If CreateNetworkServer(1, Port , #PB_Network_TCP)




Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
      ;-------------case 1,2,3,4---------------------------------------
      
      
      
        Case 1
          MessageRequester("Server", "Ein neuer Client meldet sich!", 0)
  
  
        Case 2
         SendNetworkString(ClientID, "wiso")


       Case 3
       DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$, Pattern$, Pattern)
       If DateiName$

       
       
       
       
       ReceiveNetworkFile(ClientID, DateiName$)
       
       EndIf 
      
       Case 4
       MessageRequester("Server", "Die verbindung zum Client wurde getrennt!", 0)
       
       
       
       
       
       

       
       
       
       
       
EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)

EndIf

  
End   




Ich habe gedacht mein Router lässt den String durch wenn ich kurz vorher schon eine anfrage dem Computer geschickt habe, oder ich hab was Falsch Programmiert.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Ich habe gedacht mein Router lässt den String durch wenn ich kurz vorher schon eine anfrage dem Computer geschickt habe, oder ich hab was Falsch Programmiert.
das ist gut möglich, das dein router das durchlässt was dann zurückkommt. die frage ist jedoch, ob die anfrage selbst durch den potentiellen router des anderen computers durchkommt, und überhaupt bearbeitet wird.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

ja ich habs erstmal mit 127.0.0.1 probiert . dann hab ichs mit meinem freind probiert. kommt dass bei meinem freund an, wenn der ISDN und so´n fritz hat?
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Joel hat geschrieben:...dann hab ichs mit meinem freind probiert
falls du feind meinst, dann lässt dieser es vermutlich nicht durch... :lol:

wie gesagt mit loop-back ist es sowieso wieder was ganz anderes.

weiß jemand ob der loop-back überhaupt ins LAN geht, oder ob er sich nur innerhalb der netzwerkhardware des rechners abspielt?

@joel
sag doch endlich mal, was du selbst für einen router hast (bitte genaue angaben)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

ich meinte Natürlich Freund aber bei meinem Feind könnet ichs auchmal ausprobieren nur ne Tour schlimmer, ich meinte den in dem Thema Luft machen!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

#NULL hat geschrieben:@joel
sag doch endlich mal, was du selbst für einen router hast (bitte genaue angaben)
!!!!!!!!!!!!!


und diesen link, den ich jetzt schon zum 3. mal poste, hast du dir vermutlich auch noch nich angeschaut. :roll:
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten