0

画像を送信するためにC#ソケットを試しています。動作しますが、不安定です。送信される画像は非常に大きく、更新が非常に速いため、時々ちらつきます。可能であれば、送信されたデータを圧縮する方法を探しています。私はこのコードを使用しています:

サーバ側:

System.IO.MemoryStream stream = new System.IO.MemoryStream();

// !! Code here that captures the screen !!

bitmap.Save(stream, myImageCodecInfo, myEncoderParameters);

byte[] imageBytes = stream.ToArray();
stream.Dispose();

// Send the image
clientSocket.Send(imageBytes);

// Empty the byte array?
for (int i = 0; i < imageBytes.Length; i++)
{
    imageBytes[i] = 0;
}

クライアント側:

private void OnConnect(IAsyncResult ar)
{
    try
    {
        MessageBox.Show("Connected");

        //Start listening to the data asynchronously
        clientSocket.BeginReceive(byteData,
                                    0,
                                    byteData.Length,
                                    SocketFlags.None,
                                    new AsyncCallback(OnReceive),
                                    null);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Stream Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

private void OnReceive(IAsyncResult ar)
{
    try
    {
        int byteCount = clientSocket.EndReceive(ar);

        // Display the image on the pictureBox
        MemoryStream ms = new MemoryStream(byteData);
        pictureBox1.Image = Image.FromStream(ms);
        }
    catch (ArgumentException e)
    {
        //MessageBox.Show(e.Message);
    }
    clientSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null);
}
4

1 に答える 1

0

結局gzipを使用しました。

ちらつきは、更新が非常に速いためではなく、ソケットの設定方法が原因であることがわかりました。画像全体を送信していませんでした。

于 2012-08-20T23:42:31.953 に答える