Vb.netEnvoi par jpegs prise tcp ... parfois incomplète
Salut
Je travaille sur un projet depuis des mois (vb express de 2008). Il y a un dernier problème que je ne peux pas résoudre.
Je dois envoyer des images à un client à partir d'un «serveur» (écouteur). Le code ci-dessous fonctionne la plupart du temps mais parfois l'image est incomplète. Je crois que cela pourrait être quelque chose à voir avec les tailles de paquets tcp variant, peut-être limitée par la façon dont il est occupé sur le net. I ont vu des exemples de code qui divisent l'image en morceaux et les envoie, mais je ne peux pas les faire fonctionner parce que j'utilise une autre version de vb. Les images à envoyer sont petites 20k max.
Tout exemple de code de travail serait merveilleux. J'ai expérimenté et échoué avec ce dernier obstacle pendant des semaines.
Merci d'avance.
client -----
Sub GetPic()
'------- Connect to Server
ClientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _ ProtocolType.Tcp)
ClientSocket.Connect(Epoint)
'------- Send Picture Request
Dim Bytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes("Send Picture")
ClientSocket.Send(Bytes, Bytes.Length, SocketFlags.None)
'------- Receive Response
Dim RecvBuffer(20000) As Byte
Dim Numbytes As Integer
Numbytes = ClientSocket.Receive(RecvBuffer)
Dim Darray(Numbytes) As Byte
Buffer.BlockCopy(RecvBuffer, 0, Darray, 0, Numbytes)
'------- Close Connection
ClientSocket.Shutdown(SocketShutdown.Both)
ClientSocket.Close()
'-------
Dim MStrm = New MemoryStream(Darray)
Picture = Image.FromStream(MStrm)
End Sub
Listener -----
'Threaded from a listener
Sub ClientThread(ByVal Client As TcpClient)
Dim MStrm As New MemoryStream
Dim Rbuffer(1024) As Byte
Dim Tbyte As Byte()
Dim NStrm As NetworkStream = Client.GetStream()
Dim I As Integer = NStrm.Read(Rbuffer, 0, Rbuffer.Length)
Dim Incoming As String = System.Text.Encoding.ASCII.GetString(Rbuffer, 0, I)
If Incoming = "Send Picture" then
Picture Save(MStrm, Picture.RawFormat)
Tbyte = MStrm.ToArray
NStrm.Write(Tbyte, 0, Tbyte.Length)
End if
Client.Close()
End Sub