[ASP.NET] problème Null Exception

Résolu/Fermé
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023 - Modifié le 6 août 2020 à 15:57
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023 - 14 sept. 2020 à 14:20
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 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 ?

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

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

11 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
6 août 2020 à 00:41
Sur quelle ligne ?
0
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
6 août 2020 à 10:21
Merci pour la réponse.

ligne 44, dans le sub Envoi_Message. Cela fonctionne correctement lors du premier passage dans le sub (envoi du Pseudo), mais cela plante lors des passages suivants pour l'envoi de messages .
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
6 août 2020 à 13:11
Bonjour

2 questions:
  • cette classe hérite de Page, y’a t il aussi une variable MonSocketClient dans Page?
  • MonSocketClient est public, la classe qui appelle _Defaut agit elle sur ce champ?

0
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
Modifié le 10 août 2020 à 14:55
oups, je sens le pro en face de moi .... j'ai toujours utilisé Dreamweaver (2003 ?) et Javascript et aujourd'hui je suis projeté dans Visual Studio et donc un peu perdu.

Ici tout ce que j'ai fait, c'est créer la partie HTML de la page en positionnant les divers éléments tels que les boutons et les zones de texte, et retranscrit en l'adaptant le code d'un client WinForm qui fonctionne.


0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
6 août 2020 à 15:02
Ha c’est de l’ASP? Ça aurait été bien de le préciser....

pro non, et APS je ne connais pas.

Mais bon, on va essayer.

Est ce que quelque part tu as un code du genre
Truc = new _Defaut()
0

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

Posez votre question
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
Modifié le 10 août 2020 à 14:55
Merci pour votre investissement

je n'ai nulle part new _Default.

Par contre _Default apparaît deux fois :

1 - la classe _Default est aussi référencée ici (création de la page HTML) _ Les options Strict On et Explicit On peuvent-elles avoir une influence (je ne comprends pas trop bien leur portée) ?

'------------------------------------------------------------------------------
' <généré automatiquement>
'     Ce code a été généré par un outil.
'
'     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
'     le code est régénéré.
' </généré automatiquement>
'------------------------------------------------------------------------------

Option Strict On
Option Explicit On


Partial Public Class _Default

    '''<summary>
    '''Contrôle TXT_MESSAGES.
    '''</summary>
    '''<remarks>
    '''Champ généré automatiquement.
    '''Pour modifier, déplacez la déclaration de champ du fichier de concepteur dans le fichier code-behind.
    '''</remarks>
    Protected WithEvents TXT_MESSAGES As Global.System.Web.UI.WebControls.TextBox

    '''<summary>
    '''Contrôle TXT_MESSAGE.
            etc ....

    '''Contrôle BT_Envoi.
         etc ...

    '''Contrôle BT_CONNEXION.
        etc ...
    '''Contrôle BT_DECONNEXION.
     etc ...
End Class


2: dans l'entête de cette page (je comprends que c'est pa parrtie asp pour créer la page aspx) Ceci comprend le code html correspondant à la page créée avec l'outil Design (drag & drop) :

<%@ Page Title="WebSocket" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.vb" Inherits="MyClientClient_VB._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">



    <p><asp:TextBox Height="300" Wrap="true" Width="600" ID="TXT_MESSAGES" runat="server"></asp:TextBox><BR></p>
    <p><asp:TextBox ID="TXT_MESSAGE" runat="server" Width="600px"></asp:TextBox>               <asp:Button ID="BT_Envoi" runat="server" Text="Envoi" /><BR></p>
    <p>               </p>
    <p>   <asp:Button ID="BT_CONNEXION" runat="server" Text="CONNEXION" /> 
                                                                                           
        <asp:Button ID="BT_DECONNEXION" runat="server" Text="Deconnexion" Visible="False" />
    </p>


</asp:Content>

0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
6 août 2020 à 15:34
Pour poster un code merci de lire et appliquer https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Comme Jordane l’a indiqué plus haut quand il a édité on premier message.

D’ailleurs en éditant ton message ( tu as une heure à partir du moment où tu l’as posté) tu enlèveras ton adresse mail c’est contraire à la charte pour la simple raison que n’importe qui pourras te spammer....


Option Strict On oblige à déclarer toutes les variables.
Option Explicit On oblige à ne pas jouer avec les types sans conversion explicite par exemple jeter une string dans un double.

Peux tu chercher si ailleurs il est fait mention de MonSocketClient
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
6 août 2020 à 15:58
J'ai changé le titre du sujet "Aide programmation Visual Basic" n'étant pas très informatif.
0
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
Modifié le 10 août 2020 à 14:55
Merci , c'est là que je me rends compte que la terre a tourné pendant ces 10 dernières années ... ;-)

0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
6 août 2020 à 19:50
comment MonSocketClient peut-il passer du stade objet instancié à null entre deux appels à la sub

Désolé mais là ça me dépasse.
Il faut attendre quelqu’un qui connaisse ASP.
0
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
Modifié le 7 août 2020 à 18:29
c'est une page client, elle n'est pas exécutée sur le serveur mais dans le navigateur ....

mystère ....

Merci pour votre temps



Message modifié par la modération
Mettre une adresse email dans la signature n'est pas admis et n'est très prudent sur un forum public, va dans ton profil afin de la supprimer, la signature doit être une devise, ton pseudo, mais pas une adresse de site WEB, ton vrai nom ou ton adresse mail.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
14 sept. 2020 à 13:59
je pense que le tout est exécuté sur le serveur.
tu as écrit
"Cela fonctionne correctement lors du premier passage dans le sub (envoi du Pseudo), mais cela plante lors des passages suivants pour l'envoi de messages"
qu'appelles-tu un "passage"? le tout est-il bien exécuté lors d'un seul appel de la page?
0
elshocht Messages postés 29 Date d'inscription mercredi 9 avril 2008 Statut Membre Dernière intervention 9 juin 2023
14 sept. 2020 à 14:20
merci pour tous vos messages ...

en fait, mon problème (de débuttant" venait du fait que je mélangeait les WinForms et les Webforms ... c'est pas la même soupe

0