French Problème d'envoi texte ou image

kalicem

New Member
Salut à tous et merci par avance pour l'aide que vous pourriez m'apporter.
J'essai d'envoyer du texte ou une image de mon client B4a à mon serveur vb.net.
J'arrive à envoyer le texte, mais pas l'image pouvez-vous m'aider?

Le code pour envoyer le texte du client vers le serveur est :

B4X:
Public Sub envoyer(msg As String)
    Dim tw As TextWriter
    tw.Initialize(Socket1.OutputStream)  
    tw.WriteLine(msg)
    tw.Flush 
End Sub

Le code pour recevoir les texte côté serveur est :

B4X:
Sub read(ByVal ar As IAsyncResult)
 Dim sr As New StreamReader(cli.GetStream) 
            Dim msg As String = sr.ReadLine()
            RaiseEvent MessageReçu(msg, Me)
            cli.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf read, Nothing) 
End Sub

Pour recevoir le texte côté client

B4X:
Sub AStreams_NewData (buffer() As Byte)
    Dim msg As String
    msg = BytesToString(buffer, 0, buffer.Length, "UTF8")
    Dim Message() As String =  Regex.Split("\|",msg)
     Select Case Message(0)
...
     End Select
End Sub

Pour envoyer du serveur au client :

B4X:
Sub Envoie(ByVal message As String)
        Dim sw As New StreamWriter(cli.GetStream) 
        sw.WriteLine(message) 
        sw.Flush()
    End Sub

Les images à envoyer sont ce de la caméra

B4X:
Sub Camera1_Preview (PreviewPic() As Byte)
    If DateTime.Now > lastPreviewSaved + IntervalMs Then
        Dim jpeg As String = Con.StringFromBytes( camEx.PreviewImageToJpeg(PreviewPic, 70), "UTF8")
        lastPreviewSaved = DateTime.Now
        CallSubDelayed2(ClientServeur, "Envoyer", jpeg)
    End If
End Sub

C'est la que je bloque
 

Informatix

Expert
Licensed User
Longtime User
Salut à tous et merci par avance pour l'aide que vous pourriez m'apporter.
J'essai d'envoyer du texte ou une image de mon client B4a à mon serveur vb.net.
J'arrive à envoyer le texte, mais pas l'image pouvez-vous m'aider?

Le code pour envoyer le texte du client vers le serveur est :

B4X:
Public Sub envoyer(msg As String)
    Dim tw As TextWriter
    tw.Initialize(Socket1.OutputStream)
    tw.WriteLine(msg)
    tw.Flush
End Sub

Le code pour recevoir les texte côté serveur est :

B4X:
Sub read(ByVal ar As IAsyncResult)
Dim sr As New StreamReader(cli.GetStream)
            Dim msg As String = sr.ReadLine()
            RaiseEvent MessageReçu(msg, Me)
            cli.GetStream.BeginRead(New Byte() {0}, 0, 0, AddressOf read, Nothing)
End Sub

Pour recevoir le texte côté client

B4X:
Sub AStreams_NewData (buffer() As Byte)
    Dim msg As String
    msg = BytesToString(buffer, 0, buffer.Length, "UTF8")
    Dim Message() As String =  Regex.Split("\|",msg)
     Select Case Message(0)
...
     End Select
End Sub

Pour envoyer du serveur au client :

B4X:
Sub Envoie(ByVal message As String)
        Dim sw As New StreamWriter(cli.GetStream)
        sw.WriteLine(message)
        sw.Flush()
    End Sub

Les images à envoyer sont ce de la caméra

B4X:
Sub Camera1_Preview (PreviewPic() As Byte)
    If DateTime.Now > lastPreviewSaved + IntervalMs Then
        Dim jpeg As String = Con.StringFromBytes( camEx.PreviewImageToJpeg(PreviewPic, 70), "UTF8")
        lastPreviewSaved = DateTime.Now
        CallSubDelayed2(ClientServeur, "Envoyer", jpeg)
    End If
End Sub

C'est la que je bloque
Tu devrais utiliser les fonctions EncodeBase64 et DecodeBase64 de StringUtils pour encoder et décoder l'image. Après ce n'est plus que du texte à envoyer/recevoir.
 

kalicem

New Member
Merci pour ta réponse, y'a t'il un moyen d'envoyer et recevoir en fonction du type de donnée, par exemple si j'envoi du texte, le serveur reconnait que c'est en string et si c'est l'image, le serveur reconnait que c'est encodé ?
 

kalicem

New Member
J'ai trouvé la réponse à mon problème, j'encode le texte et l'image en base64 côté client, dans chaque message j'ajoute ° .
Côté serveur si le message reçu contient ° c'est du texte, sinon une image :


B4X:
Dim ImageOuText As String = Encoding.UTF8.GetString(Convert.FromBase64String(msg))
            If ImageOuText.Contains("°") Then
                msg = Encoding.UTF8.GetString(Convert.FromBase64String(msg))
                RaiseEvent MessageReçu(msg, Me)
            Else
                RaiseEvent ImageReçu(msg, Me)
            End If

et pour base64 en image :

B4X:
  Dim b() As Byte
        Dim MS As System.IO.MemoryStream = New System.IO.MemoryStream
        Dim img As System.Drawing.Image
        b = Convert.FromBase64String(msg)
        MS = New System.IO.MemoryStream(b)
        img = System.Drawing.Image.FromStream(MS)
        PictureBox1.Image = img
 

Informatix

Expert
Licensed User
Longtime User
Merci pour ta réponse, y'a t'il un moyen d'envoyer et recevoir en fonction du type de donnée, par exemple si j'envoi du texte, le serveur reconnait que c'est en string et si c'est l'image, le serveur reconnait que c'est encodé ?
Ajoute une balise au début du texte à envoyer, genre "[TEXTE]" ou "[IMAGE]", et le serveur saura après analyse de cette balise s'il doit décoder ou non le message.
 
Top