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

VB.NET Discussion :

Visual Basic : System.NullReferenceException


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    webmaster retraité
    Inscrit en
    Juillet 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : webmaster retraité

    Informations forums :
    Inscription : Juillet 2020
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Visual Basic : System.NullReferenceException
    Bonjour,

    Novice en Visual Basic, je rencontre un problème dans le code suivant :

    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
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Threading
    Public Class _Default
      Inherits Page
      Public MonSocketClient As Socket
       Public MonThread As Thread
       Sub TraitementConnexion()
           'Envoi du pseudo au serveur
           Dim Mess As Byte() = System.Text.Encoding.UTF8.GetBytes(TXT_PSEUDO.Text)
           Dim Envoi As Integer = MonSocketClient.Send(Mess) 'Envoi du pseudo au serveur
     
           MonThread = New Thread(AddressOf ThreadLecture)
           MonThread.Start()
       End Sub
     
       Public Sub BT_Envoi_Click(sender As Object, e As EventArgs) Handles BT_Envoi.Click
           'EnvoiMessage(TXT_MESSAGE.Text)
           Dim Mess As Byte() = Encoding.UTF8.GetBytes(TXT_MESSAGE.Text)
           Dim Envoi As Integer = MonSocketClient.Send(Mess) 'Envoi du message au serveur
           TXT_MESSAGE.Text = "" 'Efface la ligne
       End Sub
    Message d'erreur :

    System.NullReferenceException : 'La référence d'objet n'est pas définie à une instance d'un objet.'
    MonSocketClient a été Nothing.


    ... et je ne comprends pas pourquoi la variable MonSocketClient existe et ne pose pas de problème à la ligne 11 et plante à la ligne 20 ...

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    C'est sans prendre la peine de tester ni d'y réfléchir beaucoup que je te répond ...

    Ce message d'erreur m'indique qu'un objet n'a pas été instancié. Je te propose donc d'utiliser New à la ligne 6 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Public MonSocketClient As New Socket
    ou bien de le faire aux lignes d'affectations 11 et 20 (ce qui me semble moins correct) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Envoi As Integer = New MonSocketClient.Send(Mess)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    webmaster retraité
    Inscrit en
    Juillet 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : webmaster retraité

    Informations forums :
    Inscription : Juillet 2020
    Messages : 11
    Points : 7
    Points
    7
    Par défaut voici le code complet,
    Je ne comprends pas pourquoi l'envoi par le socket fonctionne pour le Pseudo (Alain) mais pas pour les autres messages ?

    La connexion se passe bien, la réception des messages fonctionne mais pas l'envoi ...
    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
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Threading
     
    Public Class _Default
        Inherits Page
        'Public MonSocketClient As Socket
        Public MonThread As Thread
        Public Mess As Byte()
        Public Envoi As Integer
        Dim MonEP As IPEndPoint
     
        Public MonSocketClient As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 'Initialise le socket
     
        Public Sub BT_CONNEXION_Click(sender As Object, e As EventArgs) Handles BT_CONNEXION.Click
            MsgBox("ok")
     
            Try
                MonEP = New IPEndPoint(IPAddress.Parse("127.0.0.1"), 45435) 'Entre les informations de connexion
                MonSocketClient.Connect(MonEP) 'Tente de se connecter
                TraitementConnexion()
            Catch ex As Exception
                MsgBox("Erreur lors de la tentative de connexion au serveur. Vérifiez l'ip et le port du serveur." & ex.ToString, 2)
            End Try
        End Sub
     
        Sub TraitementConnexion()
            MsgBox("Connexion au serveur réussie !")
            'Change les statuts des contrôles
            BT_DECONNEXION.Visible = True
            TXT_MESSAGE.Visible = True
            BT_CONNEXION.Visible = False
            BT_DECONNEXION.Visible = True
            BT_Envoi.Visible = True
     
            'Envoi du pseudo au serveur
            envoi_Message("Alain")
     
            MonThread = New Thread(AddressOf ThreadLecture)
            MonThread.Start()
        End Sub
        Sub envoi_Message(TexteAEnvoyer)
            Mess = Encoding.UTF8.GetBytes(TexteAEnvoyer)
            Envoi = MonSocketClient.Send(Mess) 'Envoi du message au serveur
        End Sub
     
        Sub BT_Envoi_Click(sender As Object, e As EventArgs) Handles BT_Envoi.Click
            MsgBox(TXT_MESSAGE.Text)
            envoi_Message(TXT_MESSAGE.Text)
            TXT_MESSAGE.Text = "" 'Efface la ligne
     
        End Sub
     
        Public Sub Deconnexion()
            Me.TXT_MESSAGE.Enabled = False
            Me.BT_CONNEXION.Enabled = True
            Me.BT_DECONNEXION.Enabled = False
            Me.BT_Envoi.Enabled = False
        End Sub
     
        Sub ThreadLecture()
            While (MonSocketClient.Connected) 'Tant qu'on est connecté au serveur
                Dim Bytes(255) As Byte
                Dim Recu As Integer
                Try
                    Recu = MonSocketClient.Receive(Bytes)
                Catch ex As Exception 'Erreur si fermeture du socket pendant la réception
                    MsgBox("Connexion perdue, arrêt de la réception des données ...", 1)
                    'If Not Me.IsDisposed Then 'Si ce n'est pas le client qui est en cours de fermeture
                    'Me.Invoke(New dDeconnexion(AddressOf Deconnexion))
                    'End If
                End Try
                Dim Message As String
                Message = System.Text.Encoding.UTF8.GetString(Bytes)
                Message = Message.Substring(0, Recu)
                'Dim Temp As String = TXT_MESSAGES.Text
                'Message = Temp + Message
                TXT_MESSAGES.Text = Message
                'TXT_MESSAGES.Items.Add(Message)
                MsgBox(Message)
            End While
        End Sub
     
    End Class

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Au moins ton message d'erreur a-t-il disparu ?
    Si oui, je l'avais donc bien compris, si non ...

    Mais sur le fait que ça fonctionne à la réception et pas à l'envoi, j'espère que d'autres se donneront la peine de t'aider car perso, je n'ai aucune expérience de ce type de programme.

    Bonne soirée,


  5. #5
    Futur Membre du Club
    Homme Profil pro
    webmaster retraité
    Inscrit en
    Juillet 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : webmaster retraité

    Informations forums :
    Inscription : Juillet 2020
    Messages : 11
    Points : 7
    Points
    7
    Par défaut :-(
    merci mais non, le message d'erreur est toujours le même .... j'ai simplement simplifier le code en mettant dans une sub la fonction d'envoi de message. Cela passe pour l'envoi du pseudo mais pas d'un message .... Je n'y comprends rien (c'est vrai aussi que je suis novice en Visual Basic et avec les socket, mon époque, c'est Basic puyis HTML et JavaScript et ASP classique).
    Merci pour ton attention

Discussions similaires

  1. besoin d'aide Visual basic
    Par orpheus111 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/09/2011, 10h40
  2. Besoin d'aide visual basic 2008
    Par oami89 dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/02/2011, 19h03
  3. Aide Visual Basic inactive
    Par nerok dans le forum Général VBA
    Réponses: 6
    Dernier message: 14/04/2008, 11h16
  4. besoin d'aide visual basic
    Par lapologie dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2007, 14h03
  5. Réponses: 2
    Dernier message: 17/04/2007, 22h15

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