Client connectet nicht zu Server

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Client connectet nicht zu Server

Beitrag von captain third »

hi,
ich habe einen server geschrieben der ankommende Clientn erstmal auf username und passwort überprüft,naja der Client den ich dazu geschrieben habe will aber nicht auf den server connecten ich zeige euch die codes,vlt findet ihr das problem

Code: Alles auswählen

SERVER
Enumeration
  #UserList
EndEnumeration

NewList ClientID()
OpenConsole()
InitNetwork()
CreateNetworkServer(499)
ConsoleTitle("Server Port 499")

sevent=NetworkServerEvent()

Repeat
  Buffer=AllocateMemory(2000)
  Select sevent
    Case 1
      ClientID=NetworkClientID()
      AddElement(ClientID())
      
    Case 2
      ReceiveNetworkData(ClientID,Buffer,2000)
      Neu$=StringField(PeekS(Buffer),1,"@")
      Name$=StringField(PeekS(Buffer),2,"@")
      Passwort$=StringField(PeekS(Buffer),3,"@")      
      OpenFile(#UserList,"User.txt")
      
      Repeat 
        UserData$=ReadString()
        If Name$=Userdata$
          UserPasswort$=ReadString()
          If UserPasswort$=Passwort$
            quit=1
            Menu=1
            CloseFile(#UserList)
          ElseIf UserPasswort$<>Passwort$
            quit=1
            Menu=2
            CloseFile(#UserList)
          EndIf 
        EndIf
      Until quit=1
      
    Select Menu
      Case 1
        SendNetworkString(ClientID,"Willkommen")
        Menu=0
      Case 2 
        SendNetworkString(ClientID,"Falsches Passwort")
        Menu=0
    EndSelect
  EndSelect
ForEver     

CLIENT
InitNetwork()
OpenConsole()
PrintN("Name und Passwort bitte")
PrintN("Name:")
Name$=Input()
PrintN("Passwort:")
Passwort$=Input()

ConnectionID=OpenNetworkConnection("127.0.0.1",499)

Anmeldung$="0"+"@"+Name$+"@"+Passwort$
SendNetworkString(ConnectionID,Anmeldung$)
Buffer=AllocateMemory(2000)
Repeat
  ReceiveNetworkData(ConnectionID,Buffer,1000)
  Print(PeekS(Buffer))
ForEver 
danke schonmal im vorraus
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Tibor
Beiträge: 42
Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen

Beitrag von Tibor »

Ungetestet:

Code: Alles auswählen

SERVER 
Enumeration 
  #UserList 
EndEnumeration 

NewList ClientID() 
OpenConsole() 
InitNetwork() 
CreateNetworkServer(499) 
ConsoleTitle("Server Port 499") 
Buffer=AllocateMemory(2000)

Repeat 
   
  Select NetworkServerEvent()
    Case 1 
      ClientID=NetworkClientID() 
      AddElement(ClientID()) 
      
    Case 2 
      ReceiveNetworkData(ClientID,Buffer,2000) 
      Neu$=StringField(PeekS(Buffer),1,"@") 
      Name$=StringField(PeekS(Buffer),2,"@") 
      Passwort$=StringField(PeekS(Buffer),3,"@")      
      OpenFile(#UserList,"User.txt") 
      
      Repeat 
        UserData$=ReadString() 
        If Name$=Userdata$ 
          UserPasswort$=ReadString() 
          If UserPasswort$=Passwort$ 
            quit=1 
            Menu=1 
            CloseFile(#UserList) 
          ElseIf UserPasswort$<>Passwort$ 
            quit=1 
            Menu=2 
            CloseFile(#UserList) 
          EndIf 
        EndIf 
      Until quit=1 
      
    Select Menu 
      Case 1 
        SendNetworkString(ClientID,"Willkommen") 
        Menu=0 
      Case 2 
        SendNetworkString(ClientID,"Falsches Passwort") 
        Menu=0 
    EndSelect 
  EndSelect 
  Delay(10)
ForEver      

CLIENT 
InitNetwork() 
OpenConsole() 
PrintN("Name und Passwort bitte") 
PrintN("Name:") 
Name$=Input() 
PrintN("Passwort:") 
Passwort$=Input() 

ConnectionID=OpenNetworkConnection("127.0.0.1",499) 

Anmeldung$="0"+"@"+Name$+"@"+Passwort$ 
SendNetworkString(ConnectionID,Anmeldung$) 
Buffer=AllocateMemory(2000) 
Repeat 
  Select NetworkClientEvent(ConnectionID)
    Case 2
      ReceiveNetworkData(ConnectionID,Buffer,1000) 
      Print(PeekS(Buffer)) 
  EndSelect
  Delay(10)
ForEver
Kristel
Beiträge: 72
Registriert: 30.08.2004 00:17

Beitrag von Kristel »

Tibor hat schon Recht, dein Fehler war, dass NetworkServerEvent() nur ein
einziges mal aufgerufen wurde und gleich in sevent gespeichert wird.
In sevent steht die ganze Zeit 0 ( was sich auch nicht ändern wird ),
weil am Anfang als der Server gestartet wird kein Client da ist, der ein Ereignis auslösen könnte.

Noch ein Fehler, der jetzt nach dem dieser beseitigt ist akut werden könnte steckt hier:

Code: Alles auswählen

Repeat 
  UserData$=ReadString() 
  If Name$=UserData$ 
    UserPasswort$=ReadString() 
    If UserPasswort$=Passwort$ 
      quit=1 
      Menu=1 
      CloseFile(#UserList) 
    ElseIf UserPasswort$<>Passwort$ 
      quit=1 
      Menu=2 
      CloseFile(#UserList) 
    EndIf 
  EndIf 
Until quit=1
Du liest hier Zeilenweise den Usernamen aus der Datei.
Wenn der mit dem empfangenden übereinstimmt wird das Passwort
ausgelesen, dass gleich unter dem Usernamen in der Datei stehen müsste.
Wenn aber der Username nicht übereinstimmt liest du die nächste Zeile aus,
wo ja eigentlich das Passwort steht. Das würde theoretisch nur doppelt so
lange dauern, wie eigentlich nötig um den richtigen Usernamen zu finden.
Wenn der Aufbau der Datei so aussieht:

Code: Alles auswählen

Username1
Passwort1
Username2
Passwort2
Username3
Passwort3
Username4
Passwort4
...
Könnte aber auch zu Fehlern führen,
wenn ein Passwort mit dem empfangenden Usernamen übereinstimmt
und der nachfolgende Username zufällig mit dem empfangenden Passwort übereinstimmt.

Hier mal ein Code, der das Problem simpel beseitigt ( ungetestet):

Code: Alles auswählen

Repeat 
  UserData$=ReadString() 
  If Name$=UserData$ 
    UserPasswort$=ReadString() 
    If UserPasswort$=Passwort$ 
      quit=1 
      Menu=1 
      CloseFile(#UserList) 
    ElseIf UserPasswort$<>Passwort$ 
      quit=1 
      Menu=2 
      CloseFile(#UserList) 
    EndIf
  Else
    dummy$ = ReadString()
  EndIf 
Until quit=1
Was mir noch auffällt, du schließt die Datei nicht.
Ist zwar nicht zwingend erforderlich, weil PB das automatisch macht,
ist aber sauberer und hilft Fehler zu vermeiden.
Hoffentlich konnte ich dir mit etwas helfen.

Kleiner Tip am Rande: Versuch mal die ganzen Usernamen und
Passwörter beim Start des Servers in eine LL zu laden, geht schneller als
immer wieder Datei öffnen, Zeilenweise lesen und Datei schließen.
Wenn du dabei Hilfe brauchst, musst du es nur sagen. :)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Kristel hat geschrieben:Hier mal ein Code, der das Problem simpel beseitigt ( ungetestet):

Code: Alles auswählen

Repeat 
  UserData$=ReadString() 
  If Name$=UserData$ 
    UserPasswort$=ReadString() 
    If UserPasswort$=Passwort$ 
      quit=1 
      Menu=1 
      CloseFile(#UserList) 
    ElseIf UserPasswort$<>Passwort$ 
      quit=1 
      Menu=2 
      CloseFile(#UserList) 
    EndIf
  Else
    dummy$ = ReadString()
  EndIf 
Until quit=1
Warum liest du denn das Passwort, wenn es nicht gebraucht wird in "dummy$"? Es reicht doch ein einfacher Aufruf von "ReadString()".
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten