none
j'ai besoin d'aide Visual Basic : System.NullReferenceException RRS feed

  • Question

  • Bonjour,
    j'ai besoin d'aide pour un problème dont je ne peux imaginer l'origine:

    J'écris une application Web qui va utiliser les sockets pour communiquer. J'ai un serveur qui fonctionne, le problème se pose coté client.
    Je me base sur un code de chat (windows form) que j'adapte.
    La connexion au serveur se passe sans souci, l'envoi d'un pseudo passe correctement mais dès qu'il s'agit d'envoyer un message, alors que j'utilise le même sub que pour le pseudo, j'ai l'erreur suivante lors de test en local (127.0.0.1) avec IIS Express:

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


    D'où vient le problème ? Voici le code :

    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

    Merci pour votre aide
    mercredi 5 août 2020 21:27