PDA

View Full Version : دریافت خطای ارسال حجم بیش از حد مجاز در پروتکل udp



ahadabasi
شنبه 08 فروردین 1394, 20: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);
}
}

با تشکر

Hamid2547
شنبه 08 فروردین 1394, 23:51 عصر
مطمئن نیستم این در مورد کار شما صدق کنه، ولی معمولا توی پروژه های تحت وب توی وب کانفیگ میتونید مقدار زمان تایم اوت دادن و سایزی که ارسال میشه رو ست کنید:


<system.web>
<httpRuntime executionTimeout="9999" maxRequestLength="2097151" />
</system.web>

اطلاعات بیشتر (https://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.85%29.aspx)

ahadabasi
دوشنبه 10 فروردین 1394, 20:25 عصر
مطمئن نیستم این در مورد کار شما صدق کنه، ولی معمولا توی پروژه های تحت وب توی وب کانفیگ میتونید مقدار زمان تایم اوت دادن و سایزی که ارسال میشه رو ست کنید:


<system.web>
<httpRuntime executionTimeout="9999" maxRequestLength="2097151" />
</system.web>

اطلاعات بیشتر (https://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.85%29.aspx)

ممنون ولی فکر نکنم همچین چیزی در سوکت نویسی وجود داشته باشه