Bonjour,
Suite à de précieux conseils en rapport à cette discussion là
J'utilise le Sockethandle pour gérer les identifiants d'un parc de scans. Un scan envoit une requête mon serveur lui renvoie la réponse. Et pour savoir à quel scan renvoyer la réponse j'utilise mon sockethandle :
Quand mon scan envoit une demande :
Je stocker cet identifiant dans le champ idconnexion de ma table AdresseIp et quand je renvoi mon information :
Code : Sélectionner tout - Visualiser dans une fenêtre à part idConnect := Socket.SocketHandle;
Je renvoi grâce à ma socket et l'id de connexion du scan.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 procedure envoiMsgSocket(IdScan : Integer; sCodeBarre : String; sMessage : String;ServerSocket : TServerSocket; Trace : TMemo); var iTailleMessage : Integer; idDeConnexion : integer; FichierIni : TIniFile; ActiveTrace : integer; begin //Je calcule la taille du message qu'on va envoyer. //Pourquoi ? Parce que sous WinDev on utilise le mode de transmission SocketTailleDébut et le mode de transmission doit être //identique sur le poste serveur et sur le poste client il faut donc préciser la taille du message et le message !! try FichierIni := TIniFile.Create(PathExe + 'paramSkipradio.ini'); ActiveTrace := StrToInt(FichierIni.ReadString('ActiveTrace', 'Active', 'Erreur')); idDeConnexion := IndexHandle(ServerSocket, IdScan); iTailleMessage := Length(sMessage); ServerSocket.Socket.Connections[idDeConnexion].SendText(IntToStr(iTailleMessage) +CRLF+ sMessage); maDate := FormatDateTime('dd/mm/yyyy hh:nn:ss', Now); Trace.Lines.Add(maDate + ' Réponse envoyée au client ' + IntToStr(idScan) + ' ' + sMessage); if ActiveTrace = 1 then begin WriteTrace(maDate + ' :' + ' TailleMessage : ' + IntToStr(iTailleMessage) + ' Message envoyé : ' + sMessage); end; FichierIni.Free; except on E : Exception do LogErreur('Anomalie dans l''envoi du message vers le programme radio - Main - envoiMsgSocket ' + ' Message d''erreur : '+ e.Message); end; end;
Cependant après tests je m'aperçois que certains scans récupère parfois le même identifiant ce qui génère de sacrés conflits...
Est ce que quelqu'un pourrait m'aider ?
Partager