Tableau de byte [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008
-
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008
-
Salut j' ai le problème qui suit
<hr />Dim

buffer
As
Byte() =
New
Byte(1024) {}
client.Receive(buffer)

<hr />
A chaque fois le débogueur block sur la ligne en rouge en disant ceci:
La référence d'objet n'est pas définie à une instance d'un objet

Merci d'avance Jabaka

9 réponses

Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

bonjour

C'est peut-être l'instanciation de client1 qui n'est pas correct

voici un exemple vue dans la msdn

Dim endPoint As New IPEndPoint(address, port)

Dim tempSocket As New Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)

tempSocket.Connect(endPoint)

thierry la fronde
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

bonsoir

dim buffer(1024) as Byte / ne serait pas mieux?
cette syntaxe compile mais je vois pas l'intérêt ou le rôle.. je manque d'info sur cette affaire

Dim buffer As Byte() = New Byte(1024) {}
thierry la fronde
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008

Oui j'ai essayer
Dim buffer(1024) as Byte
 Cependant j'ai la même erreur qui revient
La référence d'objet n'est pas définie à une instance d'un objet
Ce pourrait-il que
client.Receive(buffer) donne une erreur si Receive recoit rien 
 Merci d'avance encore une fois au courageux volontaires :P
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008

Le problème a vraiment l'air de venir du coté de client une instance de Socket
précédemment defenit comme suis car
Dim

client
As Socket  TOUT EST OK ICI
Dim

buffer1(1024)
As
Byte  TOUT A L AIR OK ICI client1.Receive(buffer1)  ICI CA BLOCK TOUJOURS

Dim clientcommand
As
String = System.Text.Encoding.ASCII.GetString(buffer1)  ICI TOUT FONCTIONNE SI CLIENT.RECEIVE EST IGNORER

J'ai essayer aussi client.Accept() et ca donne la meme erreur aussi
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Salut,
Débutant?
Quand tu vas sur Socket avec le curseur ça te donne quoi? "Nothing"
Donc:
Dim client
As New
Socket
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Une classe (un objet par référence) doit toujours être initialisé avant de pouvoir être utilisé. Et ceci se fait par ce qu'on appel le constructeur, la Sub New, appelé en ajoutant un New avant le type.
MonBouton = New Button

Les types par valeur, c'est à dire les types de base (Integer, Double...) ou les structures, ne nécécitent pas de constructeur, mais il sont possible.
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
"C'est peut-être l'instanciation de client1 qui n'est pas correct"
Cela ne fait pas de doute, suffit de voir son code:
Dim clientAs Socket   TOUT EST OK ICI

Dim buffer1(1024)As Byte  TOUT A L AIR OK ICI

client1.Receive(buffer1) ICI CA BLOCK TOUJOURS

Voila comment il faut faire:

Dim clientAsNew Socket 

Dim buffer1(1023)As Byte 

client1.Receive(buffer1)

Lors de la déclaration d'un tableau on définit l'index du dernier élément du tableau. Donc pour avoir un tableau de 1024 élément, on déclare avec 1023
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008

Merci pour vos réponses mais en passant les parametres a new Socket(socket.addressfamily,socket.sockettype,socket.ptotocoltype)
adress family c l'adresse localhost? ou celle du client qui se connecte
il me donne une erreur comme quoi je ne peut pas avoir 2 socket de lancer a la meme adresse je vais vous laisser une partie du code si vous pouvez trouver ce qui marche pas serait gentil :P Merci d'avance
<hr />Private

listener
As TcpListener

Private clientsocket
As Socket

Private
Sub StartListening()

Dim listener
As TcpListener =
New TcpListener(listenport)
listener.Start()

While
True
   Try
   Dim s
As Socket = listener.AcceptSocket()
   clientsocket = s          ca doit etre dans ce coin ici qu'il faudarait placer le new et j'aimerais
                                        que ServiceClient se lance seulement a l'acceptation listener.AcceptSocket()
   clientService =
New Thread(
New ThreadStart(
AddressOf ServiceClient)) 
   clientService.Start()

   Catch ex
As Exception

   RaiseEvent SMsg(ex.ToString)

   End
Try
End
While
'listener.Stop()
End
Sub

Private
Sub ServiceClient()

Dim keepalive
As
Boolean =
True
Dim buffer1(1024)
As
Byte
   While keepalive =
True
   clientsocket.Receive(buffer1)
<hr />
Messages postés
19
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
26 septembre 2008

Finalement j'ai trouver une source sur le site qui va satisfaire tout ma curiosité coté socket cliente serveur merci à tous