1

最近、他のコンピューターのデスクトップを表示するアプリを作成することにしました。デスクトップは表示できますが、画像は 1 つしか送信されないようです :? クライアント側でTCPクライアントといくつかのスレッドを使用しています(デスクトップを表示するもの)。サーバーが画像を送信すると、その後ロックされたように見え、応答しなくなります クライアント受信コード:

    Private Sub check()
    If sock.Connected = True Then
        sock.SendTimeout = 5000
        Try
            Application.DoEvents()
            Dim nstream As NetworkStream
            Dim bf As New BinaryFormatter
            nstream = sock.GetStream
            PictureBox1.Image = Nothing
            PictureBox1.Image = bf.Deserialize(nstream)
            If nstream.DataAvailable = True Then
                MsgBox(nstream)
            End If
        Catch ex As Exception
            check()
        End Try
    End If
End Sub

そして、これはそれを送信するためのコードです 送信コード:

    Public Function Desktop() As Image
    Dim bounds As Rectangle = Nothing
    Dim screenshot As System.Drawing.Bitmap = Nothing
    Dim graph As Graphics = Nothing
    bounds = Screen.PrimaryScreen.Bounds
    screenshot = New Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    graph = Graphics.FromImage(screenshot)
    graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
    Return screenshot
End Function

Private Sub SendDesk()
    If sock.Connected = True Then
        Try
            Dim nstream As NetworkStream
            Dim bf As New BinaryFormatter
            nstream = sock.GetStream
            bf.Serialize(nstream, Desktop())
        Catch ex As Exception
        End Try
    End If
End Sub

私はしばらく Vb.net でコーディングしてきました (基本的なもの、いくつかの HTTP のもの) が、TCP およびネットワーク ストリームは初めてです。

4

1 に答える 1

0

画像送信プロセスを繰り返す必要があります...

While sock.Connected = True
        Try
            Dim nstream As NetworkStream
            Dim bf As New BinaryFormatter
            nstream = sock.GetStream
            bf.Serialize(nstream, Desktop())
        Catch ex As Exception
        End Try
    End While
于 2017-01-27T21:23:57.953 に答える