Vb.net et page HTML

mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008 - 24 avril 2008 à 15:05
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008 - 5 mai 2008 à 16:14
Bonjour a tous je me permet de faire apel a vos connaissances car g un probleme. J'ai créé un programme sur VB.net qui ouvre une connection avec un serveur voila le programme en VB.net :

Public Class Form1
    Const portNumber As Integer = 8080
    Dim tcpListener As New Net.Sockets.TcpListener(portNumber)
    Public ServerFlag As Integer




    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "Server is disabled"
        ServerFlag = 0
        Timer1.Interval = 100
        Timer1.Enabled = True
        'Label2.Text = Net.IPAddress


    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If ServerFlag = 0 Then
            ServerFlag = 1
            Button1.Text = "Stop server"
            ' Must listen on correct port- must be same as port client wants to connect on.


            tcpListener.Start()
            Label1.Text = "Server is enabled, wait for client!"
        Else
            ServerFlag = 0
            Button1.Text = "Start server"
            tcpListener.Stop()
            Label1.Text = "Server is disabled"


        End If
       
    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick


        If ServerFlag = 1 Then
            ' Only if pending connection
            If (tcpListener.Pending = True) Then
                Timer1.Enabled = False
                'Accept
                Dim tcpClient As Net.Sockets.TcpClient = tcpListener.AcceptTcpClient()
                Label1.Text = "Connection accepted!"


                ' Get the stream
                Dim networkStream As Net.Sockets.NetworkStream = tcpClient.GetStream()


                ' Read the stream into a byte array
                Dim bytes(tcpClient.ReceiveBufferSize) As Byte
                networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
                ' Return the data received from the client to the console.
                Dim clientdata As String = System.Text.ASCIIEncoding.ASCII.GetString(bytes)


                MsgBox("Client sent: " + clientdata)


                Dim responseString As String = "Connected to server ... please wait"


                Dim sendBytes As [Byte]() = System.Text.ASCIIEncoding.ASCII.GetBytes(responseString)
                networkStream.Write(sendBytes, 0, sendBytes.Length)


                Dim File2send As System.IO.FileStream = System.IO.File.OpenRead(".\\equinoxe.htm")
                Dim FileReader As New System.IO.StreamReader(File2send)
                responseString = FileReader.ReadToEnd
                FileReader.Close()
                File2send.Close()


                Dim buff1 As [Byte]() = System.Text.ASCIIEncoding.ASCII.GetBytes(responseString)
                networkStream.Write(buff1, 0, buff1.Length)


                'envoi fichierimage
                MsgBox("Client sent: " + clientdata)


          
                File2send = System.IO.File.OpenRead(".\main.jpg")
                Dim FileReader2 As New System.IO.StreamReader(File2send)
                responseString = FileReader2.ReadToEnd
                FileReader2.Close()
                File2send.Close()


                Dim buff2 As [Byte]() = System.Text.ASCIIEncoding.ASCII.GetBytes(responseString)
                networkStream.Write(buff2, 0, buff2.Length)
                '================================================




                'MsgBox("Message Sent />  " + responseString)




                Timer1.Enabled = True
            End If


        End If


    End Sub
End Class

la connection serveur fonctionne ma page html s'ouvre bien mais le probleme c'est que l'image je n'arrive pas a la recuperez je la recoit en format texte je pense que sq vient de mon streamReader.

Je vous prie de bien vouloir m'aider svp je suis vraiment en galere.

13 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
24 avril 2008 à 16:32
Salut,

File2send = System.IO.File.OpenRead(".\main.jpg")
Dim FileReader2 As New System.IO.StreamReader(File2send)
responseString = FileReader2.ReadToEnd
FileReader2.Close()
File2send.Close()

Tu lis le stream de l'image pour la stocker dans une variable string, je vois pas ce que tu pourrais avoir d'autre qu'un "format texte"

Fais plutot un truc de ce genre:

File2send = System.IO.File.OpenRead(".\main.jpg")
' Chargement de l'image:
Dim Image as New Bitmap(File2send)
File2Send.Close
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
24 avril 2008 à 17:10
Je te remercie bcp kevin pour ta reponse sa l'air de fonctionner mais je n'affiche quand meme pas mon image g juste un carré avec une croix rouge au moins je n'est plus le  tableau de bytes.
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
24 avril 2008 à 23:36
Re,

Ouais, mon dernier message n'était pas très utile, puisque il montre comment créer une Image, que tu ne peux pas envoyer tel quel sur le réseau.

Si je reprend du début, c'est effectivement ton StreamReader qui pose problème, le StreamReader est conçu pour lire du texte.
Et que je sache, tu peux pas stoquer des données binaires dans un String, tu aura des pertes de données.
Pourquoi passer par une variable String et utiliser un StreamReader?

      File2send = System.IO.File.OpenRead(".\main.jpg")
      Dim FileReader2 As New System.IO.StreamReader(File2send)
      ' Lecture du fichier jpg en text???
      responseString = FileReader2.ReadToEnd           
      FileReader2.Close()  
      File2send.Close()                           ' La fermeture du Reader ferme aussi le Stream -> inutile       
      ' Pour le retransformer en Bytes?
      Dim buff2 As [Byte]() = System.Text.ASCIIEncoding.ASCII.GetBytes(responseString)
      networkStream.Write(buff2, 0, buff2.Length)

Il faut, au contraire de ce que tu dis en dernier, tout faire dans un tableau de Bytes.
Alors voici la solution (c'est plus court ) :

      Dim ImgBuff() As Byte = IO.File.ReadAllBytes(".\main.jpg")
      networkStream.Write(ImgBuff, 0, ImgBuff.Length)

Mais tu peux aussi faire avec la version longue:

    ' Ouvrir le fichier
    Dim FileStream As IO.FileStream = System.IO.File.OpenRead(".\main.jpg")
    ' Utiliser un BinaryReader et pas un StreamReader pour lire des données binaires
    Dim FileReader As New System.IO.BinaryReader(FileStream)
    ' Lire le fichier complet et en faire un tableau de bytes
    Dim ImgBuff() As Byte = FileReader.ReadBytes(FileStream.Length)
    ' Fermer le Reader (le Stream est fermé aussi avecFileReader.Close)
    FileReader.Close()
    ' Envoyer le tableau
    networkStream.Write(ImgBuff, 0, ImgBuff.Length)
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
24 avril 2008 à 23:47
non malheuresement sa ne fonctionne tjrs pas maintenant sa m'affiche le tableau de byte et le petite caré avec la croix.

En tout cas un grand merci pour ton aide je suis en train de devenir dingue avec ce programme. 
0

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

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
25 avril 2008 à 01:37
Bah pourtant mon code envois bien les données du fichier, tel quel.

Ou est-ce que ça t'affiche un tableau de Bytes?

A mon avis, c'est que tu n'envois pas ces données au bon endroit ou que le format n'est pas supporté à l'affichage
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
25 avril 2008 à 04:10
A la fin de ma page HTML il y une serie de code incomprehensible je pense ke ce sont les bytes de l'images et a l'endroit ou je veut mon image il ya le carré avec la croix rouge:


 
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
25 avril 2008 à 07:28
Heu...

Tu envois les données de l'image directement dans un fichier HTML?

Je te conseil de voir la source d'une page web contenant une image, voir à quoi ca ressemble
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
25 avril 2008 à 16:54
oui je l'envoie ds un fichier HTML parce ke le but de mon serveur c'est lorqu'il est actif  je dois meconnecté dessus avec l'adresse ip 127.0.0.1:8080 et sa m'affiche mapage HTML avec toute mes commande et mon image.
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
25 avril 2008 à 21:14
Oui d'accord, mais une image n'est jamais dans une page HTML.

L'image doit être un fichier séparé, et si tu veux l'afficher dans ton HTML tu y met le lien...
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
28 avril 2008 à 16:03
oui c ce ke g effectivement l'image est a part mais a dans le meme dossier ke ma page html. J'aimerai également savoir s'il est possible  de faire l'inverse c a dire d'envoyer un message texte a un programme vb  a partir de la page HTML c adire en clikant sur un lien de la page HTML j'aimerai ke cela génere un message texte vers mon programme vb.net. Merci bcp de prendre la peine de m'aider  c vraiment sympa de ta part.
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
30 avril 2008 à 20:07
oui je sais c ce que j'ai fais mon image est a part elle s'apel main.jpg et sur mon code source de ma page html je fait apel a mon image en ecrivant
"<img style = width:200px; height:150px; "background-image: src="main.jpg"align=middle"

"

d'apres un amis c parce ke j'envoie ma pagr html et mon image en meme tpset ke je devais modifier mon programme pour k'apres la  connection on envoie d'abord la page html puis ensuite limage
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
5 mai 2008 à 14:04
Tu envois tout ça à quoi?

Si c'est à un client qui se connecte, ça ne peut pas fonctionner ton truc. Tu dois d'abord héberger l'image qqpart, pour que le client la charge une fois que lui le voudra (lorsque il chargera la page web), donc il ne faut en tout cas pas envoyer cette image lorsque le client se connecte.

Ce que tu dois faire, c'est un serveur de fichier. Si le client veux charger le fichier main.jpg, tu l'envois, si il veut un autre fichier, tu envois cet autre fichier...

Si ton but est de faire un serveur d'hébergement de site web, je pense que tu es parti dans la mauvaise direction...
0
mpjp57 Messages postés 18 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 23 mai 2008
5 mai 2008 à 16:14
mon image est ds un fichier separer mais je laisse tomber l'image maintenant au lieu de limage jaimerai envoie du texte c'est a dire lorsque je clik sur un menu de ma page d'acceuille  jaimerai envoyer un message texte.. Est ce que c possible.


 


merci encore
0