c# split and send image buffer
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
add a comment |
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
add a comment |
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
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
c# arrays .net udp
asked Nov 14 '18 at 13:23
Creţu CosminCreţu Cosmin
12
12
add a comment |
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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