[RESOLU] Problème connexion client/serveur
Publié : lun. 05/avr./2010 8:38
Bonjour,
Ça fait pas mal de temps maintenant que je bosse sur mon moteur d'MMORPG 2D, mais là je suis confronté à un problème que je n'arrive pas à résoudre.
Mon serveur accepte la connexion d'un client, puis au 2nd il me renvoi un "Invalid Memory Access." :
Ce serait peut être dû à l'utilisation de structures mais dans ce cas là je vois pas comment régler le problème...
Ça fait pas mal de temps maintenant que je bosse sur mon moteur d'MMORPG 2D, mais là je suis confronté à un problème que je n'arrive pas à résoudre.
Mon serveur accepte la connexion d'un client, puis au 2nd il me renvoi un "Invalid Memory Access." :
Code : Tout sélectionner
Procedure ReceiveEncodedData(ClientID.l)
ResetList(t_client())
While NextElement(t_client())
If t_client()\id = ClientID
If ReceiveNetworkData(ClientID, t_client()\buffer, 1000)
Base64Decoder(t_client()\buffer, MemorySize(t_client()\buffer), t_client()\buffer, MemorySize(t_client()\buffer))
EndIf
Break
EndIf
Wend
If ListSize(t_client()) > 0
If t_client()\buffer <> #Null
Select PeekL(t_client()\buffer)
Case #CLIENT_verif
AddElement(client())
client()\id = t_client()\id
Define message.s = PeekS(t_client()\buffer+4)
client()\login = Left(message, FindString(message, Chr(221), 1)-1)
client()\pass = Right(message, Len(message)-FindString(message, Chr(221), 1))
client()\ip = t_client()\ip
client()\timer = ElapsedMilliseconds() + 600000
; /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\
client()\buffer = AllocateMemory(1000) ; /!\ Ici ça foire /!\
; /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\ /!\
PrintN(FormatDate("%hh:%ii | ", Date())+"Login : "+client()\login)
PrintN(FormatDate("%hh:%ii | ", Date())+"Mot de passe : "+client()\pass)
If DatabaseQuery(#DataBase, "SELECT * FROM player WHERE login = '"+client()\login+"' AND pass = '"+MD5Fingerprint(@client()\pass, Len(client()\pass))+"'")
If NextDatabaseRow(#DataBase)
PrintN(FormatDate("%hh:%ii | ", Date())+"Identification valid"+Chr(130)+"e")
;envoyer confirmation
FreeMemory(t_client()\buffer)
DeleteElement(t_client())
Else
PrintN(FormatDate("%hh:%ii | ", Date())+"Identification refus"+Chr(130)+"e")
SendEncodedMessageToT_Client(t_client()\id, #SERVER_refus, "")
FreeMemory(client()\buffer)
DeleteElement(client())
EndIf
FinishDatabaseQuery(#DataBase)
Else
PrintN(FormatDate("%hh:%ii | ", Date())+"Identification refus"+Chr(130)+"e")
SendEncodedMessageToT_Client(t_client()\id, #SERVER_refus, "")
FreeMemory(client()\buffer)
DeleteElement(client())
EndIf
EndSelect
EndIf
EndIf
ResetList(client())
While NextElement(client())
If client()\id = ClientID
client()\timer = ElapsedMilliseconds() + 600000
If ReceiveNetworkData(ClientID, client()\buffer, 1000)
Base64Decoder(client()\buffer, MemorySize(client()\buffer), client()\buffer, MemorySize(client()\buffer))
EndIf
Break
EndIf
Wend
If ListSize(client()) > 0
If client()\Buffer <> #Null
EndIf
EndIf
EndProcedure