IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Lecture de port : 1 trame sur deux !


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Lecture de port : 1 trame sur deux !
    Bonjour,

    Ci-dessous, le code qui me permet de capturer des trames envoyées par des devices distants via GPRS .

    Voici le problème rencontré :

    chaque 5 secondes, le boitier envoie sa position au serveur.
    Celui-ci capture bien la trame mais seulement toutes les 10 secondes.

    Si je paramètre la fréquence du boitier chaque 30 secondes, la réception se fera toutes les 60 secondes !

    Il doit y avoir quelque chose avec le networkstream que j'ignore.
    J'avoue ne pas comprendre pourquoi je ne capture que la moitié des trames.

    Une idée ?

    Merci d'avance

    PS : l'appli tourne sur un serveur virtuel et sous web server 2008 R2
    PS2 : le pb est le meme sur un pc classique

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text
    Imports System.IO
     
    Public Class Module1
     
     
        Public Shared port As Integer = 65535
        Public Shared adresse_ip As String = "192.168.10.200"
     
        Public Delegate Sub Ajout(ByVal Valeur As String) 'declare un délégué pour insérer des datas dans le listbox
        Public Shared serverinfo As IPEndPoint = Nothing
        Public Shared counter As Integer 'Compteur pour le client connecté
        Public Shared incrementation As Integer = 0
     
     
        Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
                Dim ipAddress As IPAddress = Dns.GetHostEntry(adresse_ip).AddressList(0)
            Dim serverSocket As New TcpListener(ipAddress, port)
            Dim clientSocket As TcpClient = Nothing
     
            Dim date_socket As Date
            Dim ip_socket_connecté As String
     
            Try
                serverSocket.Start()
                Invoke(New Ajout(AddressOf msg), New Object() {Date.Now & " : Serveur démarré. Port " + port.ToString + " - " + ipAddress.ToString})
                counter = 0
                            While (True)
                    counter += 1
                    clientSocket = serverSocket.AcceptTcpClient()
                    Invoke(New Ajout(AddressOf msg), New Object() {Date.Now & " : Client No: " + Convert.ToString(counter) + " Démarré ! " + " IP : " + clientSocket.Client.RemoteEndPoint.ToString})
     
                    Console.WriteLine(" : Client No: " + Convert.ToString(counter) + " Démarré ! " + " IP : " + clientSocket.Client.RemoteEndPoint.ToString)
     
                    date_socket = Date.Now 'Date
                    ip_socket_connecté = clientSocket.Client.RemoteEndPoint.ToString 'IP
     
                    Dim client As New handleClinet
                    client.startClient(clientSocket, Convert.ToString(counter), ip_socket_connecté, date_socket)
                End While
     
                'clientSocket.Close()
                'serverSocket.Stop()
                Invoke(New Ajout(AddressOf msg), New Object() {"exit"})
            Catch ex As IOException
                Console.WriteLine(Date.Now.Date & " 000-IOEXCEPTION : Erreur : " & ex.Message)
     
            Catch ex As SocketException
                Console.WriteLine(Date.Now.Date & " 000-SOCKET : Erreur : " & ex.Message)
            End Try
        End Sub
     
        Public Class handleClinet
            Dim clientSocket As TcpClient
            Shared clNo As String 'Numéro du client
            Shared clIP As String 'Adresse ip du client connecté
            Shared clDate As Date 'Date et heure de la connection du client
     
            Shared chaine_SYNCHEADER As String = ""
            Shared chaine_SYNCID As String = ""
            Shared CHAINE_UNITID As String = ""
     
     
            Public Sub startClient(ByVal inClientSocket As TcpClient, ByVal clineNo As String, ByVal clineIP As String, ByVal clineDate As Date)
                Me.clientSocket = inClientSocket
                handleClinet.clNo = clineNo 'Numéro du client
                handleClinet.clIP = clineIP 'Adresse IP du client connecté
                handleClinet.clDate = clineDate 'Date du client connecté
                Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf ecoute)
                ctThread.Start()
            End Sub
     
            Public Sub ecoute()
     
                Dim bytes(clientSocket.ReceiveBufferSize) As Byte
                'Dim bytes(10024) As Byte
     
                Dim networkStream As NetworkStream = clientSocket.GetStream()
     
                Dim valeur_true As Boolean = True
     
                While (clientSocket.Connected)
     
                    Try
                        networkStream.Read(bytes, 0, CInt(clientSocket.ReceiveBufferSize))
                        'On dissocie le header pour déterminer le boitier et son ID
                        Dim sendbytes As [Byte]() = bytes
                        chaine_SYNCHEADER = ""
                        chaine_SYNCID = ""
                        CHAINE_UNITID = ""
     
                        chaine_SYNCHEADER = Hex(bytes(1)) & Hex(bytes(0))
                        chaine_SYNCID = Hex(bytes(3)) & Hex(bytes(2))
                        CHAINE_UNITID = Hex(bytes(7)) & Hex(bytes(6)) & Hex(bytes(5)) & Hex(bytes(4))
     
     
                        Select Case chaine_SYNCHEADER
                            Case "AB65"
                                networkStream.Write(sendbytes, 0, 8)
                                header_lu = True
     
                                Dim chaine_Serveur As String = ""
                                'Console.WriteLine(Date.Now & " " & HexaToDec(CHAINE_UNITID))
     
                        End Select
     
                    Catch ex As IOException
                        Console.WriteLine("700 : " & ex.Message)
                    End Try
     
     
                    Try
     
                        If clientSocket.Connected = False Then
                            Console.WriteLine(Date.Now & " Clientsocket fermé, exit sub")
                            Exit Sub
                        End If
     
                        Dim networkStream2 As NetworkStream = clientSocket.GetStream()
                        Dim bytes2(clientSocket.ReceiveBufferSize) As Byte
     
                        If networkStream2.CanRead Then
                            Do
                                networkStream2.Read(bytes2, 0, CInt(clientSocket.ReceiveBufferSize))
     
                                Dim chaine_brute As String = ""
                                chaine_brute = Encoding.ASCII.GetString(bytes2)
                                chaine_brute = chaine_brute.Trim(Chr(&HA))
                                chaine_brute = chaine_brute.Trim(Chr(&HD))
                                Dim tabstring() As String = Split(chaine_brute, Chr(13))
     
     
                                'Traitement des données
     
     
                            Loop While networkStream2.DataAvailable
                        Else
                            Console.WriteLine("Lecture impossible du networkstream2 !")
                        End If
                    Catch ex As IOException
                        Console.WriteLine("876 : " & ex.Message)
                    Catch ex As SocketException
                        Console.WriteLine("880 : " & ex.Message)
                    End Try
                End While
            End Sub
        End Class
    End Class

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 15
    Points : 16
    Points
    16
    Par défaut si le stream est lu deux fois...
    clientSocket.GetStream() est répétée deux fois.

    La première fois, elle capte les données du stream

    quelques lignes plus loin, elle recapture les données du stream.
    Apparemment, il est vide. Donc plus de données à lire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/09/2012, 17h49
  2. Problème de lecture de trame sur port COM !
    Par petitclem dans le forum C++Builder
    Réponses: 23
    Dernier message: 29/03/2010, 16h27
  3. Réponses: 9
    Dernier message: 21/11/2005, 19h51
  4. [USB]envoyer une trame sur le port USB
    Par ced38100 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 13h54
  5. Réponses: 2
    Dernier message: 27/02/2003, 02h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo