تمام سوالات سوالات بدون پاسخ سوال بپرسید

سلام من قصد دارم یه برنامه ای رو بنویسم که بشه یه فایل رو از طرف سرور به کلاینت ها ارسال کرد من واسه اینکار از متد Socket Programing استفاده کردم و الان بدون هچی مشکلی برنامم داره کار میکنه

ولی الان میخوام یکم توسعش بدم که وقتی فایل بصورت "کامل" ارسال شد، یه کارهای دیگه ای رو انجام بده

من الان دقیق نمیدونم که چطور شرط بزارم که آیا فایل بصورت کامل ارسال شده یا خیر

خب، این یه قسمتی از کدم هستش که فایل رو ارسال میکنه:

public void SendFile(string remoteHostIP, int remoteHostPort, string longFileName, string shortFileName)
    {
        try
        {
            if (!string.IsNullOrEmpty(remoteHostIP))
            {
                byte[] fileNameByte = Encoding.ASCII.GetBytes(shortFileName);
                byte[] fileData = File.ReadAllBytes(longFileName);
                byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
                byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
                fileNameLen.CopyTo(clientData, 0);
                fileNameByte.CopyTo(clientData, 4); fileData.CopyTo(clientData, 4 + fileNameByte.Length);
                TcpClient clientSocket = new TcpClient(remoteHostIP, remoteHostPort);
                NetworkStream networkStream = clientSocket.GetStream();
                networkStream.Write(clientData, 0, clientData.GetLength(0));
                networkStream.Close();
                MessageBox.Show("فایل ارسال شد");
            }
            else
            {
                MessageBox.Show("فایل ارسال نشد");
            }
        }
        catch
        {
            MessageBox.Show("خطا در ارسال");
        }
    }

اگه دقت کنید، اونجا که نوشتم "فایل ارسال شد" میخوام قبلش یه شرط قرار بدم که چک کنه آیا فایل بصورت کامل ارسال شده یا خیر!

الان دقیق برنامم اینجوری کار میکنه؛ وقتی یه فایل با حجم بالا ارسال میکنم، بعد از 2 الی 3 ثانیه اون پیغام "فایل ارسال شد" رو نشون میده، در صورتی که میبینم هنوز فایل بصورت کامل ارسال نشده و فایل بصورت مخفی داره ارسال میشه که اینکار باعث میشه کاربر طرف سرور نفهمه که کِی فایل بصورت کامل ارسال شده!

امیدوارم منظورم رو گرفته باشید. :)

ممنونم

2 پاسخ

سلام
دوست عزیز متد tcp فایل رو کامل به یکباره ارسال نمیکنه و به صورت چندین پکت ارسال میکنه.
پیغام شما بعد از ارسال اولین پکت نمایش داده میشه نه همه فایل.
البته در فایلهای حجیم بیش از چند کیلوبایت نمیشه به چک کردن tcp اعتماد کرد و معمولا در سمت گیرنده CRC فایل چک میشه و به فرستنده یک کد accept میفرستند و دریافت کامل و صحت فایل رو اعلام میکنند و یا بدون چک کردن CRC اگر صحت فایل مهم نیست فقط دریافت فایل رو اعلام میکنند.
موفق باشید


سلام
برنامه شما باید به همین صورت درست کار کنه. بدلیل اینکه اسناد MSDN میگه در NetworkStream متود Write() بصورت Synch کار میکنه (برنامه رو بلاک میکنه تا کار ارسال تمام بشه) و Flush() هیچ تاثیری نداره چون چیزی بافر نمیشه!
من تصور میکنم مشکل شما چیز دیگری باشه. از چه طریقی پی میبرید که کار ارسال تمام نشده؟!
متود Write
متود Flush

toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها