Bonjour,
Je travaille (débutant) sur des échanges de données via un Socket en mode synchrone.
Pour mes essais j'ai créé deux applications VB.net (VS2008), une "Serveur" l'autre "Client".
Sur l'application "Serveur" je déclare un socket (ligne 14) et attends une trame comme suit:La fonction SocketEnvoi.Available() renvoie toujours zéro, y compris lorsque la fonction SocketEnvoi.Receive(MesBytes) renvoie une trame émise par le client.
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 Dim SocketEnvoi As Socket = Nothing Dim MesBytes() As Byte ' Ouverture du socket Dim S = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) S.ReceiveTimeout = TimeOut ' 5 secondes S.Bind(MonEP) ' Lie le socket à cette IP/port ' attente de la connexion d'un client unique S.Listen(1) ' Argument = nombre de clients acceptés en file d'attente SocketEnvoi = S.Accept() ' attente d'une trame du client Dim Nba As Integer = SocketEnvoi.Available() ' toujours zéro ! ReDim MesBytes(250) ' par défaut Dim n = SocketEnvoi.Receive(MesBytes) ' n est correctement positionné en fonction de la trame reçue. '...
Du côté client la fonction .Available()(ligne 13) fonctionne correctement ce qui me permet de définir une attente de trame. Voici l'extrait de la partie client:Donc, comment se fait-il que la fonction .Available() fonctionne sur le client et pas sur le serveur ?
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 Dim MonSocketClient As Socket Dim Port As Integer = 8080 Dim IP As String = "192.168.1.150" MonSocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) MonSocketClient.ReceiveTimeout = 5000 ' 5 secondes Dim MonEP As IPEndPoint = New IPEndPoint(IPAddress.Parse(IP), Port) MonSocketClient.Connect(monEP) ' Attente d'une trame du serveur Dim B As Integer = MonSocketClient.Available() ' renvoie le nombre d'octets de la trame en attente If B > 0 Then ReDim Buff(B) ' lit tous les caractères disponibles dans le buffer '....
Si elle n'est pas appropriée du côté serveur, comment faire pour savoir s'il y a une trame en attente sans utiliser la fonction .Recieve() qui est soumise au timeout ?
Merci pour vos lumières.
Partager