ahadabasi
شنبه 08 فروردین 1394, 21:49 عصر
تابع ارسال توسط پروتکل udp
public void sendwc()
{
Socket SendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(txt_ip.Text), int.Parse(txt_port.Text));
byte[] BF;
MemoryStream ms;
while (true)
{
BF = new byte[1024];
ms = new MemoryStream();
this.Invoke((MethodInvoker)delegate
{
Bitmap bmp = new Bitmap(CamImageBox.Image.Bitmap);
bmp.Save(ms, ImageFormat.Bmp);
BF = ms.GetBuffer();
SendSocket.SendTo(BF, ipend);
});
ms.Flush();
ms.Close();
Thread.Sleep(300);
}
}
هر 300 میلی ثانیه یک تصویر برداشته میشود و ارسال می شود ولی چونکه حجم این تصویر بیشتر از 64 کیلوبایته با پیغام خطای زیر مواجه می شوم
A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself
چطور می توان این تصویری که هر 300میلی ثانیه برمیداریم ، را به چند پارت تقسیم کنیم و قسمت قسمت ارسال کنم و البته در طرف دریافت کننده این بسته ها را بافر کنم تا بسته آخر بیاید و تصویر را نمایش بدهم
اگه کامپوننت یا کد آماده ، جزوه یا کلا آموزشی در این زمینه سراغ داریم معرفی کنید
اینم از کد سمت دریافت کننده
public void getwc()
{
Socket GetSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(txt_ip.Text), int.Parse(txt_port.Text));
EndPoint ip = (EndPoint)ipend;
GetSocket.Bind(ipend);
byte[] bf;
MemoryStream ms;
while (true)
{
ms = new MemoryStream();
bf = new byte[1024];
int r = GetSocket.ReceiveFrom(bf,ref ip);
ms = new MemoryStream(bf, 0, r);
this.Invoke((MethodInvoker)delegate
{
try
{
picbox_recive.Image = Image.FromStream(ms);
}
catch
{
;
}
});
ms.Flush();
ms.Close();
Thread.Sleep(300);
}
}
با تشکر
public void sendwc()
{
Socket SendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(txt_ip.Text), int.Parse(txt_port.Text));
byte[] BF;
MemoryStream ms;
while (true)
{
BF = new byte[1024];
ms = new MemoryStream();
this.Invoke((MethodInvoker)delegate
{
Bitmap bmp = new Bitmap(CamImageBox.Image.Bitmap);
bmp.Save(ms, ImageFormat.Bmp);
BF = ms.GetBuffer();
SendSocket.SendTo(BF, ipend);
});
ms.Flush();
ms.Close();
Thread.Sleep(300);
}
}
هر 300 میلی ثانیه یک تصویر برداشته میشود و ارسال می شود ولی چونکه حجم این تصویر بیشتر از 64 کیلوبایته با پیغام خطای زیر مواجه می شوم
A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself
چطور می توان این تصویری که هر 300میلی ثانیه برمیداریم ، را به چند پارت تقسیم کنیم و قسمت قسمت ارسال کنم و البته در طرف دریافت کننده این بسته ها را بافر کنم تا بسته آخر بیاید و تصویر را نمایش بدهم
اگه کامپوننت یا کد آماده ، جزوه یا کلا آموزشی در این زمینه سراغ داریم معرفی کنید
اینم از کد سمت دریافت کننده
public void getwc()
{
Socket GetSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse(txt_ip.Text), int.Parse(txt_port.Text));
EndPoint ip = (EndPoint)ipend;
GetSocket.Bind(ipend);
byte[] bf;
MemoryStream ms;
while (true)
{
ms = new MemoryStream();
bf = new byte[1024];
int r = GetSocket.ReceiveFrom(bf,ref ip);
ms = new MemoryStream(bf, 0, r);
this.Invoke((MethodInvoker)delegate
{
try
{
picbox_recive.Image = Image.FromStream(ms);
}
catch
{
;
}
});
ms.Flush();
ms.Close();
Thread.Sleep(300);
}
}
با تشکر