الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية متابعة تحميل الكلاينتس الذين يقومون بتحميل ملفات من السيرفر

بدأه الـشـاهيـن في 6 سبتمبر 2011 · 15 رد · 988 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي سيرفر يوفر ملفات للمستخدمين ليقومون بتنزيلها

اريد معرفة معلومات التحميل التي تتم لكل من قام بتحميل الملف (وقت بداية التحميل + ووقت انتهاء التحميل + IP ) باستخدام ال JSP او Servlet

بالنسبة لبداية التحميل هي من وقت ضغط المستخدم على الرابط. ولكن كيف اعرف بأن الكلاينت انتهى من تحميل الملف لكي أقوم بتسجيل وقت الإنتهاء من التحميل؟؟؟؟

#2

أيضا لو كانت هناك طريقة لمنع التحميل المتعدد من نفس ال IP؟ بمعنى ان امنع المستخدم من تحميل ملفين معا في نفس الوقت

#3

كل هذه المعلومات تجدها في HttpServletRequestالموجود في الداله doGet..

بالنسبه لموضوع منع ال IP ... فبمجرد الحصول على ال IP الخاص بالمستخدم.. يمكنك بفعل ما تشاء به ..

#4

شكرا على ردك استاذ هويدي؛ نعم استطيع ان اعرف IP وبعض معلومات الريكويست الأخرى لكل من يبدأ بتحميل الملف.

ولكن المشكلة عندي هي كيفية معرفة إنتهاء التحميل أو انقطاعه؟ وكيف اعرف اذا كان المستخدم يحمل ملف واحد او اكثر؟

اذا كنت تقصد ان اقوم بوضع لست بالآي بيز مثلا لكل من يقوم بالتحميل فكيف أعرف بأن الآي بي اكمل تحميل الملف او تم قطع تحميله لأي سبب لأشطبه من الليسته!

السؤال بطريقة أخرى:

عندما آخذ الآي بي من الريكويست وقبل بدء التحميل, كيف يتم التشييك هل هذا الآي بي الآن يقوم بتحميل ملف آخر من السيرفر غير هذا الملف في هذه اللحظة أو لا؟

#5

إسمحلى أناقشك في المطلب نفسه ..

ما رأيته هو أن نمنع المستخدم من تحميل عدد ملفات أكثر من كذا .. وليس أن نمنعه من تحميل أكثر من ملف في نفس الوقت ..

#6
هويدي كتب:

إسمحلى أناقشك في المطلب نفسه ..

ما رأيته هو أن نمنع المستخدم من تحميل عدد ملفات أكثر من كذا .. وليس أن نمنعه من تحميل أكثر من ملف في نفس الوقت ..

الذي أقصده هو مثلا كما يحدث في موقع الرابيد شير لغير المسجلين حينما تقوم بتحميل ملفين في نفس الوقت يعرف ويطلب منك الانتظار حتى الانتهاء من الملف الحالي ثم يفرض وقت اضافي ايضا بين التحميلين

الذي اريده نفس الطريقة لكن بدون الوقت الاضافي. -منع تحميل أكثر من ملف في نفس اللحظة-

آمل ان تكون وضحت الفكرة :sad:

#7

ما رأيك في هذا ال psedocode ؟

public void doGet(HttpServletRequest request, HttpServletResponse response)
{

	String ip = request.getRemoteHost();
	GlobalObjects.getIpList().contains(ip)
	{
		reponse.getOutputStream().write("There's another download already in progress".getBytes());
		return;
	}

	GlobalObjects.getIpList().add(ip);		// saved some where prehaps as a  Application-scoped variable
	InputStream is = request.getServletContenxt().getResourceAsStream(request.getParameter("requestFileName"));

	OutputStream responseStream = response.getOutputStream();

	byte[] buff = new byte[1024];

	while  ( in.read(buff) != -1)
		responseStream.write(buff, 0, buff.length);

	// this will not reached unless the file is completely downloaded (the while loop ends)
	GlobalObjects.getIpList.remove(ip); // don't miss this

	return;
}
#8

شكرا على ردك استاذ هويدي

لم يعمل معي الكود السابق ولكن وجدت طريقة لازلت أحاول ان تعمل, وهي عن طريق java bean scope=application

لاتزال هناك مشكلة لم استطع حلها

package fileHosting;

import java.util.List;

public class IPsBean {

	private  List ipsList;

	public void add(String ip) {
			ipsList.add(ip);
	}

	public boolean contains(String ip) {
		    if(ipsList.contains(ip))
		    		return true;
		    else
		    	return false;
	}

	public void remove(String ip){
	    	ipsList.remove(ip);
	}
}

<body>
<jsp:useBean   id="currentDownloadersIps"  class="fileHosting.IPsBean" scope="application" />
<%
String ip = request.getRemoteHost();
		if(currentDownloadersIps.contains(ip)) // if the ip is curntly downloading
        {
			out.println("<h2>Sorry!...</h2><BR>This IP address is currently downloading another file. <BR>Unregestered users cannot download multible files at the same time, please <a href=\"login.jsp\" >Login</a> or <a href='register.jsp' >Register</a>");
            return;
        }
        currentDownloadersIps.add(ip); // Add IP to the list until the download is compleated


        InputStream is = request.getServletContenxt().getResourceAsStream(request.getParameter("requestFileName"));

        OutputStream responseStream = response.getOutputStream();

        byte[] buff = new byte[1024];

        while  ( in.read(buff) != -1)
                responseStream.write(buff, 0, buff.length);


			currentDownloadersIps.remove(ip);
...

المشكلة تظهر من الكلاس وليس من jsp بحيث يحدث الخطأ عند استدعاء الدالة list.contains

هل هناك خطأ في استخدامي لjava bean

تم تعديل هذه المشاركة بواسطة الـشـاهيـن في 10 سبتمبر 2011 في 19:06

#9

لم أصلا تستخدم JSP ؟

هذا Business خاص بال Controller وليس لل view فيه شيئا ...

#10
هويدي كتب:

لم أصلا تستخدم JSP ؟

هذا Business خاص بال Controller وليس لل view فيه شيئا ...

:unsure:

لأنني واجهت مشكلة غريبة في مشروعي بمجرد زيادة عدد ال servlets عن 2 حتى بعد اضافة معلومات السيرفلت الثالثة لملف web.xml تبقى المشكلة بحيث تظهر رسالة بأن السيرفلت غير موجودة!!!

عموما انا وضعتها مؤقتا في jsp لتجربة الحل وهي تعمل لتحميل الملف ولكن لم استطع تشغيل java bean عليها.

لو تم معرفة مشكلة استخدام servlet ثالث, هل تزال فكرة ال java bean تفي بالغرض؟

#11

ماهى مشكلة السيرفلت الثالث ..

#12

تم حل مشكلة عدم تحميل أكثر من ملف في نفس الوقت باستخدام application-scope java bean :) ولكن على JSP , مع الشكر لك عزيزي هويدي على مساعدتك

بقيت هناك مشكلتين مهمة:

1- اذا تم قطع الاتصال من الكلاينت قبل ان يكتمل تحميل الملف فإنه لايزال الآي بي معلق في الليسته ولايستطيع الكلاينت تحميل ملف آخر بعد ذلك. كيف اعرف بانقطاع التحميل لأحذف الآي بي؟

2- عند اضافة سيرفلت ثالث للمشروع تظهر رسالة - (HTTP Status 404 - The requested resource (/projectX/ServletY is not available -

وأحيانا تظهر هذه الرسالة مع السيرفلتس الأخرى التي كانت تعمل بالأصل, مع العلم انني اضفت جميع السيرفلتس في web.xml . ملاحظة: استخدم برنامج Eclipse !!!

#13
اقتباس
اذا تم قطع الاتصال من الكلاينت قبل ان يكتمل تحميل الملف فإنه لايزال الآي بي معلق في الليسته
لا أعتقد ذلك

بالنسبه للنقطه الثاثيه .. إعرض ال structure الخاص بملفات مشروعك كذا ملف ال web.xml

ضع الكود الصحيح الضي قمت بحل المشكله به لكي يستفاد منه آخرون

#14

بالمناسبة IPsBean لديها مشكلة مع multithreading

لكن بما أنك انتهيت من الموضوع ولم تضعه لفائدة الآخرين

فعليك اكتشافها بنفسك :)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15
اقتباس
بالمناسبة IPsBean لديها مشكلة مع multithreading

يااه يا علاء ... منذ فتره لم أقرأ هذه الكلمه ... multithreading ...

أشعر أن كل الكود الذي أكتبه منذ فتره non-thread safe!

#16

ما أنا قايلك سيبك من الـ C هتخرب أخلاقك

أنتا الي مش كاين تسمع :)

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…