Seite 1 von 1

Client connectet nicht zu Server

Verfasst: 21.02.2005 21:13
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

Verfasst: 21.02.2005 23:36
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

Verfasst: 22.02.2005 00:27
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. :)

Verfasst: 22.02.2005 01:35
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()".