Server und Client Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Server und Client Problem

Beitrag von C4rizz »

Hi
ich hab mich mal bissl mit Server und Clients beschäftigt und bin abei auf diese 2 Examples ausm Code Archiv gestoßen.
Aber leider lässt sich nur im Netzwerk mit anderen Pc eine Verbindung herstellen über die Netzwerkip.
Leider geht es nicht wie angegeben übers Internet.
Wie kann also ein andere Pc übers Internet auf meinen erichteten Server zugreifen?

Hier mal die beiden Codes:

Server:

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=14314&highlight=
; Author: HeX0R (updated for PB 4.00 by Andre)
; Date: 08. March 2005
; OS: Windows
; Demo: Yes


; Sending a string via Internet (TCP/IP connection) 
; This is the server! Look for the related client code example!

InitNetwork() 
If ExamineIPAddresses() 
  IP.l = NextIPAddress() 
EndIf 
*buffer = AllocateMemory(2000) 
If CreateNetworkServer(0, 6654) 
  OpenConsole() 
  PrintN("Server Online Listening on IP (" + IPString(IP) + ")") 
  Repeat 
    Select NetworkServerEvent() 
      Case 0 
        If Left(Inkey(), 1) = Chr(13) 
          Quit = 1 
        EndIf 
        Delay(5) 
      Case 1 
        PrintN("Ein neuer Client hat Connectet") 
        ClientID.l = EventClient() 
      Case 2 
        length.l = ReceiveNetworkData(ClientID, *buffer, 2000) 
        String$ = PeekS(*buffer, 2000) 
        PrintN("Received:" + String$) 
    EndSelect  
  Until Quit = 1 
EndIf 
FreeMemory(*buffer) 
End 
Client:

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=14314&highlight=
; Author: HeX0R (updated for PB 4.00 by Andre)
; Date: 08. March 2005
; OS: Windows
; Demo: Yes


; Sending a string via Internet (TCP/IP connection) 
; This is the client! Look for the related server code example,
; which must be started first!

If InitNetwork() = 0 
  MessageRequester("Error", "Error") 
EndIf 
ip$ = InputRequester("","bitte server ip eingeben!","") 
Debug ip$ 
ConnectionID = OpenNetworkConnection(ip$, 6654) 
If ConnectionID 
  OpenConsole() 
  PrintN("Erfolgreich zum server Verbunden") 
  String$ = InputRequester("","String zum versenden eingeben","") 
  If String$ 
    SendNetworkData(ConnectionID, @String$, Len(String$)) 
  EndIf 
  Input() 
Else 
  Debug "error" 
EndIf 

End 
Thx schonmal für die Antworten. :)
PB 3.94/4.10
Meine Hompage
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Du musst die Ip deines Serverprograms wissen, bwz des Inet-Anschlusses, auf dem das Prog läuft.

Code: Alles auswählen

Procedure.l DownloadToMem ( URL.s, *lpRam, ramsize.l ) 
  Protected agent.s, hINet.l, hData.l, Bytes.l 
  agent = "Mozilla/4.0 (compatible; ST)" 
  hINet = InternetOpen_(@agent,0,0,0,0) 
  hData = InternetOpenURL_(hINet,@URL,"",0,$84000000,0 ) 
  If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize, @Bytes ) : Else : Bytes = -1 : EndIf 
  InternetCloseHandle_ (hINet) : InternetCloseHandle_ (hFile) :  InternetCloseHandle_ (hData) 
  ProcedureReturn Bytes 
EndProcedure 

IP.s = Space ( 256 )

If DownloadToMem ( "http://checkip.dyndns.org", @IP, 256 ) > 0 
  IP$ = Trim(StringField(StringField( IP, 2, ":" ),1,"<")) 
  InputRequester("IP - (C) Alexander N","Deine IP ist:",IP$)
EndIf
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Mhm danke aber funzt trozdem net...
Als info noch ich benutz nen router! kann das sein das da irgendwelche Ports erst freigegeben werden müssen?
PB 3.94/4.10
Meine Hompage
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Ja du musst den Port an deinen PC, also deine "interne" Netzwerk-IP weiterleiten.
Das geht meistens irgendwo unter "Portfreigabe" in der Router-Oberfläche.

In diesem Fall wäre es bei dir Port 6654

Ungefähr so...
Bild
Bild
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Kanns jetzt grad nich ausprobieren aber scheint zu klappen :mrgreen:
Vielen Vielen, Dank nach mehreren Stunden arbeit endlich mal ein Hoffnungsschimmer^^
Aber eine Frage abschließend hab ich noch und zwar, muss nur der Server Pc den jeweiligen Port freigegeben haben oder auch der Client?
Ich geh mal davon aus des es nur der Server haben muss...oder?

Ansonsten Vielen Dank für die Hilfe :allright:
PB 3.94/4.10
Meine Hompage
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Habs schon rausgefunden.
Es muss nur der Server Pc den Port freigegeben haben.
PB 3.94/4.10
Meine Hompage
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Sry nochne frage ich post ma hier rein weil es ja zusammenhängend ist.
Und zwar

Wenn ich die beiden Codes Ausprobiere:

Server

Code: Alles auswählen

InitNetwork()
If ExamineIPAddresses() 
  IP.l = NextIPAddress() 
EndIf 
*buffer = AllocateMemory(2000)
CreateNetworkServer(0,6088)
  OpenConsole() 
  PrintN("Server Online Listening on IP (" + IPString(IP) + ")") 
  Repeat 
    Select NetworkServerEvent() 
      Case 1 
        PrintN("Ein neuer Client hat Connectet") 
        ClientID.l = EventClient() 
      Case 2 
        length.l = ReceiveNetworkData(ClientID, *buffer, 2000) 
        String$ = PeekS(*buffer,2000) 
        PrintN("Received:" + String$)
    EndSelect  
  Until Quit = 1 

FreeMemory(*buffer) 
End
Client:

Code: Alles auswählen

InitNetwork()

ip$ = InputRequester("","Einfach OK drücken.","77.179.219.69") 
ConnectionID = OpenNetworkConnection(ip$,6088) 
If ConnectionID 
  String$ = InputRequester("","Bitte gib mal was ein.","") 
  If String$ 
    SendNetworkData(ConnectionID, @String$, Len(String$)) 
  EndIf  
EndIf 
Funktioniert alles bestens aufm server wird angezeigt Client ist hinzugekommen und der text des Clients.

Aber wenn ich nun dieses Serverprog hier benutze:

Code: Alles auswählen

InitNetwork()

  #Window = 0
  #Editor = 1
  #Eingabe = 2
  #enter = 3
  #ESCape = 4

OpenWindow(#Window,0,0,522,172,"CHAT",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_BorderLess)
  CreateGadgetList(WindowID(#Window))
    EditorGadget(#Editor,10,10,500,120,#PB_Editor_ReadOnly)
    SetGadgetText(#editor,"Wilkommen")
    StringGadget(#Eingabe,10,140,500,20,"")

  *buffer = AllocateMemory(2000)
  CreateNetworkServer(0,6088)
  
Repeat
event = WaitWindowEvent()

Select NetworkServerEvent() 
  Case 1 
    AddGadgetItem(#editor,-1,"Ein neuer Client hat Connectet") 
    ClientID.l = EventClient()
  Case 2
    length.l = ReceiveNetworkData(ClientID,*buffer,2000) 
    String$ = PeekS(*buffer,2000) 
    AddGadgetItem(#editor,-1,"Client : " + String$)
EndSelect 

If event = #PB_Event_CloseWindow:End:EndIf
ForEver
Und dann den Client auf dieses Serverprog benutze wird komischweise nur das Client hinzugekommen angezeigt, der Text des Clients jedoch nicht.
Kann mir einer sagen woran das liegt?
Ich bin ratols, mit der Console klappt alles und komischweise emüfängt das NetworkServerEvent() nur #PB_NetworkEvent_Connect , #PB_NetworkEvent_Data jedoch nicht o.O

Sry aber bin echt total neu auf dem Netzwerk/Internetgebiet...
PB 3.94/4.10
Meine Hompage
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Weiss den keiner warum das nicht geht?
PB 3.94/4.10
Meine Hompage
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du laesst dem Clienten nicht genug Zeit, zum testen kannst du mal
am Ende des Clienten nen Delay(12345) setzen.
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

YEA es geht! :allright: Danke
PB 3.94/4.10
Meine Hompage
Antworten