Socket : Serveur et réponse multi clients
Bonjour
J'ai un problème assez conséquent sur mon programme Serveur. En effet, je créer un Thread d'écoute à chaque connexion de nouveau client. Voici ce Thread : (allégé au maximum)
Code:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Private Sub start_listen2(ByVal clientNumber As Integer)
Dim cod_char As String
If (clientNumber = 1) Then
cod_char = codeChariottextBox.Text
Else
cod_char = codeChariottextBox1.Text
End If
Dim idinstruction as integer
Dim Reader As OracleDataReader
Do
Dim Requete As String = ****
Dim Commande As New OracleCommand(Requete, ConnexionOracle)
Try
Reader = Commande.ExecuteReader()
While Reader.Read()
idinstruction = Reader(0).ToString()
comandeTab(clientNumber) = Nothing
comandeTab(clientNumber) = idinstruction
End While
Reader.Close()
Catch ex As Exception
/
Finally
/
End Try
SendMsgToClient(comandeTab(clientNumber), clientNumber)
comandeTab(clientNumber) = Nothing
While (reponseTab(clientNumber) <> "OK")
System.Threading.Thread.Sleep(1)
End While
reponseTab(clientNumber) = Nothing
affichTerm(id)
Loop While (instru <> "FTOUR")
End Sub |
En gros : pour chaque client qui se connecte, il reçoit le premier Id d'une plage qui lui est défini. Le Thread se met en pause tant que je n'ai pas envoyé "OK" de mon client. Une fois que j'envoie "OK" de mon client, mon serveur lui renvoie un nouveau id de la plage et ainsi de suite (voir capture ci dessous)
http://img41.imageshack.us/img41/9028/948n.png
Mon soucis : lorsqu'un second client(2 par exemple) se connecte (avec une plage d'ID qui lui est propre) il va en premier lieu recevoir son ID et l'ID en cours de la plage de l'autre client(1). Une fois que j'ai cliqué sur OK, il reçoit bien ses propres ID tant que je clique sur OK. (voir capture ci dessous)
http://img826.imageshack.us/img826/2244/uecw.png
Si jamais je renvoie Ok avec mon autre client(1), celui-ci va d'abord recevoir le dernier ID envoyé au client 2 puis les bons ID liés au client (1).
En gros, j'ai un peu l'impression que mon tampon de Reader envoie dans la bonne case du tableau comandeTab(ClientNumber) son ancienne valeur Readé et pas la nouvelle.
J’espère que c'est assez clair comme description de problème.
BB59