c# split and send image buffer












0















my problem consists in sending an image bytes over udp, I have an api made strictly to imitate tcp but work as udp too, all I want is to split the image into chunks and send each one to the server, the last one with a "what's left" length



Client Side (Transmitter)



using (var stream = new MemoryStream())
{
Frame.Save(stream, ImageFormat.Png);

byte ImageBuffer = stream.ToArray();
byte SendBuffer = new byte[400];

Client.QuickMessage("SI", ImageBuffer.Length); // Start Image, buffer length

int lastPacketPos = 0;
for (int lastCounter = 0; lastCounter <= ImageBuffer.Length - 400; lastCounter += 400)
{
Buffer.BlockCopy(ImageBuffer, lastCounter, SendBuffer, 0, 400);
Client.SecureMessage("IP", SendBuffer, true); // Image Packet, buffer
lastPacketPos = lastCounter;

Thread.Sleep(1);
}

SendBuffer = new byte[ImageBuffer.Length - lastPacketPos];
Buffer.BlockCopy(ImageBuffer, lastPacketPos, SendBuffer, 0, ImageBuffer.Length - (lastPacketPos));
Client.SecureMessage("LP", SendBuffer, true); // Last Packet, buffer
}


Server Side (Receiver)



byte ImageMemory;
int bitCounter = 0;
ShareScreenWindow ClientShareWindow = new ShareScreenWindow();
private void Server_onReceivedData(string ClientName, string Message, object Obj)
{
if (Message == "SI")
{
ImageMemory = new byte[(int)Obj];
Console.WriteLine("R " + (int)Obj);
bitCounter = 0;
}
else if (Message == "IP")
{
Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
bitCounter += ((byte)Obj).Length;
Console.WriteLine(bitCounter);
}
else if (Message == "LP")
{
Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
using (MemoryStream ImageStream = new MemoryStream(ImageMemory))
{
ClientShareWindow.ShareImage.Image = Image.FromStream(ImageStream);
ImageStream.Dispose();

}
}
}


Nothing works so far, I had various errors from count being bigger than the buffer size on server side, or drawing.dll error, please help!



Messages are being sent in order, that's not the problem










share|improve this question



























    0















    my problem consists in sending an image bytes over udp, I have an api made strictly to imitate tcp but work as udp too, all I want is to split the image into chunks and send each one to the server, the last one with a "what's left" length



    Client Side (Transmitter)



    using (var stream = new MemoryStream())
    {
    Frame.Save(stream, ImageFormat.Png);

    byte ImageBuffer = stream.ToArray();
    byte SendBuffer = new byte[400];

    Client.QuickMessage("SI", ImageBuffer.Length); // Start Image, buffer length

    int lastPacketPos = 0;
    for (int lastCounter = 0; lastCounter <= ImageBuffer.Length - 400; lastCounter += 400)
    {
    Buffer.BlockCopy(ImageBuffer, lastCounter, SendBuffer, 0, 400);
    Client.SecureMessage("IP", SendBuffer, true); // Image Packet, buffer
    lastPacketPos = lastCounter;

    Thread.Sleep(1);
    }

    SendBuffer = new byte[ImageBuffer.Length - lastPacketPos];
    Buffer.BlockCopy(ImageBuffer, lastPacketPos, SendBuffer, 0, ImageBuffer.Length - (lastPacketPos));
    Client.SecureMessage("LP", SendBuffer, true); // Last Packet, buffer
    }


    Server Side (Receiver)



    byte ImageMemory;
    int bitCounter = 0;
    ShareScreenWindow ClientShareWindow = new ShareScreenWindow();
    private void Server_onReceivedData(string ClientName, string Message, object Obj)
    {
    if (Message == "SI")
    {
    ImageMemory = new byte[(int)Obj];
    Console.WriteLine("R " + (int)Obj);
    bitCounter = 0;
    }
    else if (Message == "IP")
    {
    Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
    bitCounter += ((byte)Obj).Length;
    Console.WriteLine(bitCounter);
    }
    else if (Message == "LP")
    {
    Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
    using (MemoryStream ImageStream = new MemoryStream(ImageMemory))
    {
    ClientShareWindow.ShareImage.Image = Image.FromStream(ImageStream);
    ImageStream.Dispose();

    }
    }
    }


    Nothing works so far, I had various errors from count being bigger than the buffer size on server side, or drawing.dll error, please help!



    Messages are being sent in order, that's not the problem










    share|improve this question

























      0












      0








      0








      my problem consists in sending an image bytes over udp, I have an api made strictly to imitate tcp but work as udp too, all I want is to split the image into chunks and send each one to the server, the last one with a "what's left" length



      Client Side (Transmitter)



      using (var stream = new MemoryStream())
      {
      Frame.Save(stream, ImageFormat.Png);

      byte ImageBuffer = stream.ToArray();
      byte SendBuffer = new byte[400];

      Client.QuickMessage("SI", ImageBuffer.Length); // Start Image, buffer length

      int lastPacketPos = 0;
      for (int lastCounter = 0; lastCounter <= ImageBuffer.Length - 400; lastCounter += 400)
      {
      Buffer.BlockCopy(ImageBuffer, lastCounter, SendBuffer, 0, 400);
      Client.SecureMessage("IP", SendBuffer, true); // Image Packet, buffer
      lastPacketPos = lastCounter;

      Thread.Sleep(1);
      }

      SendBuffer = new byte[ImageBuffer.Length - lastPacketPos];
      Buffer.BlockCopy(ImageBuffer, lastPacketPos, SendBuffer, 0, ImageBuffer.Length - (lastPacketPos));
      Client.SecureMessage("LP", SendBuffer, true); // Last Packet, buffer
      }


      Server Side (Receiver)



      byte ImageMemory;
      int bitCounter = 0;
      ShareScreenWindow ClientShareWindow = new ShareScreenWindow();
      private void Server_onReceivedData(string ClientName, string Message, object Obj)
      {
      if (Message == "SI")
      {
      ImageMemory = new byte[(int)Obj];
      Console.WriteLine("R " + (int)Obj);
      bitCounter = 0;
      }
      else if (Message == "IP")
      {
      Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
      bitCounter += ((byte)Obj).Length;
      Console.WriteLine(bitCounter);
      }
      else if (Message == "LP")
      {
      Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
      using (MemoryStream ImageStream = new MemoryStream(ImageMemory))
      {
      ClientShareWindow.ShareImage.Image = Image.FromStream(ImageStream);
      ImageStream.Dispose();

      }
      }
      }


      Nothing works so far, I had various errors from count being bigger than the buffer size on server side, or drawing.dll error, please help!



      Messages are being sent in order, that's not the problem










      share|improve this question














      my problem consists in sending an image bytes over udp, I have an api made strictly to imitate tcp but work as udp too, all I want is to split the image into chunks and send each one to the server, the last one with a "what's left" length



      Client Side (Transmitter)



      using (var stream = new MemoryStream())
      {
      Frame.Save(stream, ImageFormat.Png);

      byte ImageBuffer = stream.ToArray();
      byte SendBuffer = new byte[400];

      Client.QuickMessage("SI", ImageBuffer.Length); // Start Image, buffer length

      int lastPacketPos = 0;
      for (int lastCounter = 0; lastCounter <= ImageBuffer.Length - 400; lastCounter += 400)
      {
      Buffer.BlockCopy(ImageBuffer, lastCounter, SendBuffer, 0, 400);
      Client.SecureMessage("IP", SendBuffer, true); // Image Packet, buffer
      lastPacketPos = lastCounter;

      Thread.Sleep(1);
      }

      SendBuffer = new byte[ImageBuffer.Length - lastPacketPos];
      Buffer.BlockCopy(ImageBuffer, lastPacketPos, SendBuffer, 0, ImageBuffer.Length - (lastPacketPos));
      Client.SecureMessage("LP", SendBuffer, true); // Last Packet, buffer
      }


      Server Side (Receiver)



      byte ImageMemory;
      int bitCounter = 0;
      ShareScreenWindow ClientShareWindow = new ShareScreenWindow();
      private void Server_onReceivedData(string ClientName, string Message, object Obj)
      {
      if (Message == "SI")
      {
      ImageMemory = new byte[(int)Obj];
      Console.WriteLine("R " + (int)Obj);
      bitCounter = 0;
      }
      else if (Message == "IP")
      {
      Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
      bitCounter += ((byte)Obj).Length;
      Console.WriteLine(bitCounter);
      }
      else if (Message == "LP")
      {
      Buffer.BlockCopy((byte)Obj, 0, ImageMemory, bitCounter, ((byte)Obj).Length);
      using (MemoryStream ImageStream = new MemoryStream(ImageMemory))
      {
      ClientShareWindow.ShareImage.Image = Image.FromStream(ImageStream);
      ImageStream.Dispose();

      }
      }
      }


      Nothing works so far, I had various errors from count being bigger than the buffer size on server side, or drawing.dll error, please help!



      Messages are being sent in order, that's not the problem







      c# arrays .net udp






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 13:23









      Creţu CosminCreţu Cosmin

      12




      12
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301257%2fc-sharp-split-and-send-image-buffer%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53301257%2fc-sharp-split-and-send-image-buffer%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Xamarin.iOS Cant Deploy on Iphone

          Glorious Revolution

          Dulmage-Mendelsohn matrix decomposition in Python