PDA

View Full Version : سوال: ارسال و دریافت یک رشته با حجم 1 گیگابایت از طریق سوکت



arman_Delta2002
شنبه 04 اردیبهشت 1395, 11:30 صبح
سلام من میخوام از طریق دستور Send در سوکت یک ارایه بایت به حجم 1 گیگابایت رو ارسال و دریافت کنم
دقت داشته باشید که ارایه بافر من در کلاینت سرور 1024 است .
دقت داشته باشید این حجم داده یک کلاس سریالایز شده است نه یک استرینگ
چطور میتونم این دریافت رو در سرور مدیریت کنم ؟

Felony
سه شنبه 07 اردیبهشت 1395, 04:09 صبح
باتوجه به حجم بالای بافرتون ممکنه در هنگام ارسال هر مشکلی پیش بیاد حتی با بهترین شبکه و سرعت اینترنت و ...
برای مدیریت بهتره در سمت سرور به ازای هر مثلا ۱۰۰ کیلوبایت دیتا بافر رو روی دیسک ذخیره کنید و بافر دریافتی رو خالی کنید .

در زمان شروع ارسال رشته ابتدا کلاینت به سرور یه درخواست میفرسته که آخرین Chunk ی که از من دریافت کردی شمارش چند بوده و سرور وظیفه داره به اضای هر ۱۰۰ کیلوبایتی که روی دیسک ذخیره کرده به یک Counter یک عدد اضافه کنه و اونو نگهداری کنه - وقتی کلاینت درخواست رو داد سرور مقدار اون عدد رو به کلاینت برمیگیردونه و به این شیوه کلاینت با ضرب کردن عدد دریافتی در ۱۰۰ کیلوبایت میفهمه که تا کجای دیتا به صورت صحیح برای سرور قبلا ارسال شده بوده و حالا دیتا رو از اونجا به بعد برای سرور ارسال میکنه .

arman_Delta2002
چهارشنبه 08 اردیبهشت 1395, 01:26 صبح
من بافر ۱۰۰ کیلو انتخاب کردم و داده ها که یک لیستی از کلاس است رو باینری فورمتر سریالایز میکنم و یک توکن پایان برای تشخیص اتمام بسته به انتهای داده سریالایز شده اضافه میکنم بسته به سرور تیکه تیکه ارسال میشه
در سمت سرور بسته ها دریافت میشه و جمع میشه در یک بافر بافر چک میشه که ایا توکن اتمام بسته رسید یا نه و ما بغی کار...
یک مشکلی که جدیدن بهش برخوردم در زمان سریالایز مشکلی نیست ولی در زمان دی سریالایز با خطا مبنی بر این که سرالایز در یک پروژه دیگه انجام شده و شما در این پروژه نمیتوانین دسرالایز کنین مواجه شدم ! راه حل چیست؟

Felony
چهارشنبه 08 اردیبهشت 1395, 01:38 صبح
متدهای Serialize و Deserialize رو در یک dll پیاده سازی کنید و برای سریالایز و دیسریالایز کردن اطلاعات از اون dll در هر دو پروژه استفاده کنید .
البته راهکارهای دیگه ای هم داره که توضیحش تو این بحث نمیگنجه و بحثش کمی مفصله اگر نیازی بود با جستجو تو اینترنت بهشون میرسی .