Comment récuperer valeur module

Résolu
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008 - 9 juin 2008 à 11:32
manouyah Messages postés 1 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 18 septembre 2008 - 18 sept. 2008 à 18:14
Bonjour à toutes et à tous,

Petite question bête: comment récuperer une valeur dans un module pour l'afficher dans une textbox? (Je n'ai pas réussi à mettre en oeuvre les idées trouvées sur le site). Je post ce que je veux récuperer:

dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)

dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf(

"$"))msg(

"From client - " + clNo +
" : " + dataFromClient)

J'aimerai pouvoir afficher le "datafromclient".

Merci pour votre aide et bonne journée.

flatron123

15 réponses

cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
9 juin 2008 à 11:58
Salut,
Il faut voir comment sont codées tes valeurs dans ton BytesForm
est-ce que c'est simplement des valeurs à afficher les unes à la suite des autres
Dans ce cas un code tout pourri du genre
msgbox (cstr(Asc(datafromclient(0))) pour le premier octet
(a améliorer en utilisant les belles fonctions du .net)
Sinon, il faut calculer ta valeur à afficher,
ex : si c'est un integer (2 bytes)  -> V=datafromclient(0)*256+datafromclient(1) (si poid fort, poid faible)
Bref plus de précisions serait les bienvenues....
@+
Megafan
3
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
10 juin 2008 à 11:59
A y'est j'ai finit le 'squelette'
on pourra en rediscuter apres
ton e-mail please
@+
Megafan
3
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
9 juin 2008 à 12:02
Merci de ta réponse. Plus de précisions (je ne savais pas que cela pouvait rentrer en compte):

Dim



bytesFrom(10024)

As



Byte
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
9 juin 2008 à 12:15
Je reformule (au cas ou):

En fait, j'ai un module qui travaille sur la console (appli de serveur - multi client) que j'ai récupéré sur le site. Mais celui-ci n'est qu'une "brique" d'une autre appli, qui dispose d'une interface. J'aimerai, au lieu d'afficher ça dans la console, l'afficher dans une listbox (et masquer la console, tant qu'a faire) car je veux pouvoir travailler sur le texte transférer.

Merci pour votre aide.

Flatron123
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
9 juin 2008 à 14:07
A prori la premiera version suggérée te suffit,
par contre tu aurais pu avois ton tableau une valeur sur 2 ou 4 octets (voir plaus) plus à convertir et afficher sous forme de texte. Dans ce cas la méthode aurais été difference --> d'ou les precisions
Content d'avoir plu t'aider
@+
Megafan

PS : cstr(asc(..... : c'est tout pourri essaye de trouver mieux.
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
9 juin 2008 à 14:48
Ben je n'ai pas encore réglé le problème en fait. Bon, voici mon module:


Imports System.Net.Sockets



Imports



System.Text


Imports



System.Windows.Forms


Module



Module1


Dim
clientsList

As



New
Hashtable


Sub
Main()


Dim
serverSocket

As



New
TcpListener(8888)


Dim
clientSocket

As
TcpClient


Dim
infiniteCounter

As



Integer






Dim
counter

As



Integer

serverSocket.Start()


msg(




"Chat Server Started ...."
)counter = 0

infiniteCounter = 0


For
infiniteCounter = 1

To
2infiniteCounter = 1

counter += 1

clientSocket = serverSocket.AcceptTcpClient()


Dim
bytesFrom(10024)

As



Byte






Dim
dataFromClient

As



String






Dim
networkStream

As
NetworkStream = _clientSocket.GetStream()

networkStream.Read(bytesFrom, 0,


CInt
(clientSocket.ReceiveBufferSize))dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)

dataFromClient = _

dataFromClient.Substring(0, dataFromClient.IndexOf(


"$"
))clientsList(dataFromClient) = clientSocket

broadcast(dataFromClient +


" Joined "
, dataFromClient,

False
)msg(dataFromClient +


" Joined chat room "
)


Dim
client

As



New
handleClinetclient.startClient(clientSocket, dataFromClient, clientsList)


Next

clientSocket.Close()


serverSocket.Stop()


msg(




"exit"
)Console.ReadLine()


End



Sub






Public



Sub
msg(

ByVal
mesg

As



String
)mesg.Trim()

Console.WriteLine(


" >> "
+ mesg)


End



Sub






Private



Sub
broadcast(

ByVal
msg

As



String
, _


ByVal
uName

As



String
,

ByVal
flag

As



Boolean
)


Dim
Item

As
DictionaryEntry


For



Each
Item

In
clientsList


Dim
broadcastSocket

As
TcpClientbroadcastSocket =


CType
(Item.Value, TcpClient)


Dim
broadcastStream

As
NetworkStream = _broadcastSocket.GetStream()


Dim
broadcastBytes

As
[Byte]()


If
flag =

True



Then

broadcastBytes = Encoding.ASCII.GetBytes(uName +




" says : "
+ msg)


Else

broadcastBytes = Encoding.ASCII.GetBytes(msg)







End



If

broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)


broadcastStream.Flush()







Next






End



Sub






Public



Class
handleClinet


Dim
clientSocket

As
TcpClient


Dim
clNo

As



String






Dim
clientsList

As
Hashtable


Public



Sub
startClient(

ByVal
inClientSocket

As
TcpClient, _


ByVal
clineNo

As



String
,

ByVal
cList

As
Hashtable)


Me
.clientSocket = inClientSocket


Me
.clNo = clineNo


Me
.clientsList = cList


Dim
ctThread

As
Threading.Thread =

New
Threading.Thread(

AddressOf
doChat)ctThread.Start()


End



Sub






Private



Sub
doChat()


Dim
infiniteCounter

As



Integer






Dim
requestCount

As



Integer






Dim
bytesFrom(10024)

As



Byte






Dim
dataFromClient

As



String






Dim
sendBytes

As
[Byte]()


Dim
serverResponse

As



String






Dim
rCount

As



String

requestCount = 0







For
infiniteCounter = 1

To
2infiniteCounter = 1


Try

requestCount = requestCount + 1







Dim
networkStream

As
NetworkStream = _clientSocket.GetStream()

networkStream.Read(bytesFrom, 0,


CInt
(clientSocket.ReceiveBufferSize))dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)

dataFromClient =

dataFromClient.Substring(0, dataFromClient.IndexOf(


"$"
))msg(


"From client - "
+ clNo +

" : "
+ dataFromClient)rCount = Convert.ToString(requestCount)

broadcast(dataFromClient, clNo,


True
)


Catch
ex

As
ExceptionMsgBox(ex.ToString)


End



Try






Next






End



Sub









End



ClassEnd





Module

Ce que j'essaye de faire? Je voudrais qu'au lieu de la console, tout ceci se fasse dans une form (avec une listbox remplaçant la console), un déclenchement du start par un bouton (idem pour la cloture). Et je n'y arrive pas...

Si quelqu'un peut me souffler une idée svp?

En tout cas, merci de ton aide megafan :)

Merci

Flatron123
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
9 juin 2008 à 20:44
Salut,
Pas trop le temps ce soir, je regarde deamain promis.
@+
Megafan
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
10 juin 2008 à 11:18
Salut,
j'ai commencé à regardé ton truc, je te prepare une version winform
@+
Megafan
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
10 juin 2008 à 11:50
Merci Megafan :)

C'est très sympa de ta part :)

flatron123
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
10 juin 2008 à 12:03
flatron@hotmail.fr
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
10 juin 2008 à 12:35
Merci Megafan, c'est parfait, vraiment nickel.

Concernant les fonctions asynchrones, tu peux m'expliquer ce qu'elles font "physiquement" parlant? Et en quoi ne sont elles pas bloquantes? Quels est le risque de fonctions bloquantes, la perte de données?

Merci en tout cas, c'est sympas d'y passer du temps :)
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
10 juin 2008 à 14:08
Salut,
Content d'avoir pu t'aider.
Les fonctions asynchrones : Tu n'est pas obligé d'attendre dans un thread l'arrivée ou l'envoi de données. C'est le systéme qui génére un evenment tout seul lorsque des donnees arrivent.
Aucun risque de perte de donnée, par contre des performances plus important en cas d'un grand nombre de connexion.
Voila.
Tu me tiens au courant si tu as des questions.
@+
megafan
0
flatron123 Messages postés 49 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 29 juin 2008
10 juin 2008 à 15:03
Ok. Et étant donné que je dimensionne mon appli pour une moyenne de 5 Client environ, il est préférable d'opter pour de l'asynchrone alors? Comment remplacer une source synchrone par une asynchrone? On peut prendre le socket de ta source HTTP asynchrone?

Merci :)

flatron123
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
10 juin 2008 à 15:50
re
Pour 5 clients reste en synchrone,  quand je parle d'un grand nombre de connexions c'est plusieurs milliers.
Par contre pour le fun tu peux essayer avec des sockets asynchrones.
Dans ce cas oublie le stream du client et utilise le socket pour l'envoi et la reception.
@+
Megafan
0
manouyah Messages postés 1 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 18 septembre 2008
18 sept. 2008 à 18:14
salut svp,est ce que vous pouvez m'envoyer la version qu'a réalisé Megafan, celle qui est un form et non pas une console ???
Merci d'avance et svp voici mon email "emna777777@hotmail.com",le plus t^ot possible je vous en serais reconnaissante!
0
Rejoignez-nous