Vb.net
Привет
Я работаю над проектом уже несколько месяцев (vb 2008 express). Есть одна последняя проблема
который я не могу решить.
Мне нужно отправить изображения клиенту с «сервера» (слушателя). Приведенный ниже код работает большую часть времени, но иногда изображение неполное. Я полагаю, что это может быть связано с изменением размеров пакетов tcp, возможно, ограниченных тем, насколько он занят в сети. я
Я видел примеры кода, который разбивает изображение на части и отправляет их, но я не могу заставить их работать, возможно, потому что я использую другую версию VB. Картинки для отправки маленькие 20к макс.
Любые примеры работающего кода были бы замечательными. Я экспериментировал и терпел неудачу с этим последним препятствием в течение нескольких недель.
Спасибо в ожидании.
Клиент -----
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
Слушатель -----
'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