[ASP.NET] problème Null Exception
Résolu
elshocht
Messages postés
33
Statut
Membre
-
elshocht Messages postés 33 Statut Membre -
elshocht Messages postés 33 Statut Membre -
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 ?
Merci pour votre aide
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. |
A voir également:
- [ASP.NET] problème Null Exception
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : chaque paragraphe doit être espacé de 0,42 cm ou 12 pt du paragraphe qui suit les textes ne doivent pas être en retrait à droite et à gauche après ces modifications, sur quelle page se trouve le titre « la cheminée » dans le chapitre « informations diverses » ? ✓ - Forum Word
- Une exception non gérée s'est produite dans votre application - Forum Word
- Comment ouvrir un fichier null ? - Guide
11 réponses
Bonjour
2 questions:
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?
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.
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.
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
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()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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) ?
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) :
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>
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
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
Merci , c'est là que je me rends compte que la terre a tourné pendant ces 10 dernières années ... ;-)
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.
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
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. |
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?
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?
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 .