lolishe
Messages postés17Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 3 juin 2006
-
1 juin 2006 à 22:33
lolishe
Messages postés17Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 3 juin 2006
-
3 juin 2006 à 23:42
Bonsoir,
j'utilise le composant TSocket, et j'ai un problème (avec?) lorsque je veux renvoyer au client qui m'envoie une chaine de caracteres, ce qu'il vient de m'envoyer ( donc sa chaine de caracteres ^^ )
mais quand j´envoie un message ( client ) au serveur il le reçoit mais met de suite après comme erreur :
http://www.fightersonline.info/indice.PNG' target='_blank'>http://www.fightersonline.info/indice.PNG
Pourquoi et comment corriger ce genre d'erreur ? (je pense pas que le code soit nécessaire, juste que google m'a sortit des résultats sur cette erreur mais pas à ce numéro-là ni sur les sockets ..
merci beaucoup d'avance à celui ou celle qui me répondra !
cordialement !
Rajoute Connections[0] : je te le redis un serveur peut répondre à plusieurs clients. Si tu lui dis pas lequel (ici '0' c'est à dire le premier c'est à dire l'unique dans ton cas de figure), il peut pas envoyer le message.
Une simple recherche avec ca : "delphi+server+sendtext" t'aurais donné la réponse (seconde URL). C'est important de chercher (la réponse figurait aussi deja sur CS)
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 1 juin 2006 à 22:45
Delphi ?
generalement c'est une erreur qui se produit lorsqu'on essaye d'acceder a un indice d'un tableau en dehors de l'interval de ce tableaux qu'ils soit dynamique, statique...
je pense donc que quelque part dans le programme il doit y'avoir une ligne de ce genre :
Tableau[N+1] (peut aller au dela de l'indice le plus haut)
ou encore
Tableau[N-1] (peut aller en deca de l'indice le plus bas)
ou encore
Tableau[index] (peut aller n'importe ou avec une valeur d'index erronée ou non initialisée.)
il y'a en delphi un moyen simple de verifié l'interval d'un tableau :
if (Index >= Low(Tableau)) and (Index <= High(Tableau)) then ...
ou sur les type liste (TStrings, TList ect...) :
if (Index >= 0) and (Index <= List.Count-1) then ...
a partir de la on peu facilement ecrire des controls permettant la sortie d'une procedure en cas d'indice erroné.
on utiliserat la plupart du temps une fonction a retour booléen :
function UpdateValue(var Tableau : TTypeTableau; const index : integer; const Value : TypeValue) : boolean;
begin
result :=
(index < low(Tableau) or (index > high(Tableau)
;
if not result then exit;
Tableau[index] := value;
end;
Je te connais pas le Dark Basic : il se peut qu'il n'utilise pas le meme protocole
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Edit2.Text:=Socket.ReceiveText;
serversocket1.Socket.Connections[0].sendtext(edit2.text);
end;
La ca ne va pas : Tu ne testes pas le contenu de l'edit2
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
If length(Socket.ReceiveText)<>0 then
Begin
Edit2.text:=Socket.ReceiveText;
serversocket1.Socket.Connections[0].sendtext(edit2.text);
end;
end;
lolishe
Messages postés17Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 3 juin 2006 1 juin 2006 à 23:01
Ca utilise le même protocole ( TCP ) d'autant plus que sur la DLL externe que j'utilise sous darkbasic, le développeur a bien expliqué dans son fichier txt qu'un bon serveur pouvait être élaborer sur purebasic, visual basic & DELPHI !
j'vais tester ça j'te donne des nouvelles après !