Только часть изображения, отправленного через TCP
Я отправляю скриншоты каждые 500 мс на один и тот же компьютер, но он получает только около 75% изображения, и полученная сумма меняется с каждым скриншотом. При отправке на другой компьютер в той же сети (через ethernet) проходит только крошечная часть экрана.
Код для отправки скриншотов:
sendDataToServer("$scr:" & Convert.ToBase64String(New ImageConverter().ConvertTo(screenshot, GetType(Byte())))) Private Function screenshot() As Bitmap Static cap As Bitmap = Nothing If cap IsNot Nothing Then GC.RemoveMemoryPressure(cap.Width * cap.Height * 4) cap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppRgb) GC.AddMemoryPressure(cap.Width * cap.Height * 4) Using graph As Graphics = Graphics.FromImage(cap) graph.CopyFromScreen(0, 0, 0, 0, cap.Size, CopyPixelOperation.SourceCopy) End Using Return cap End Function
Получение скриншотов:
Private Sub readCallback(result As IAsyncResult) If closeMe Then Return Try networkStream = clientSocket.GetStream() Dim read As Integer = networkStream.EndRead(result) If read = 0 Then networkStream.Close() clientSocket.Close() Return End If Dim buffer As Byte() = TryCast(result.AsyncState, Byte()) Dim data As String = Encoding.UTF8.GetString(buffer, 0, read) Dim cmd As String = Nothing If data.Contains(":") Then cmd = data.Split(":")(0) data = data.Remove(0, cmd.Length + 1) Else cmd = data data = Nothing End If Select Case (cmd) '! = request, $ = response Case "$scr" main.crossThread(Utils.EnumCrossThreadFunction.updateWatchWindow, Utils.getArgs(Utils.bytesToImage(Convert.FromBase64String(data)))) Case "$ping" main.getPingData()(username) = 1 End Select awaitRequest() Catch ex As Exception End Try End Sub
Кто-нибудь знает причину этого? Клиент также отключается через несколько секунд, как только скриншоты начинают отправляться,сообщая мне, что соединение насыщается.
Что я уже пробовал:
Я пробовал использовать UDP и различные наборы TCP-кода.