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

هل للمعلومات التي ترسل بين كلينت و سيرفر لها حدود معينه

مغلق
بدأه super_rio في 1 نوفمبر 2006 · 5 رد · 917 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل للمعلومات التي ترسل بين كلينت و سيرفر لها حدود معينه

فانا في برنامج الشات ارسل محتويات ميمو ولكنها لا تصل كامله فهل هناك حدود هل مثلا هي في قيمه الstring

علما باني استخدم

if LeftStr(m,3)='clp'then
form5.Memo1.Lines.Add(Copy(m,4,100000000))

و حيث m هي الاوامر المستقبلهSocket.ReceiveText

#2

لم تتوضح كامل الفكرة لي لكن بإمكانك استخدام SendStream بدلا من SendText

#3

شكرا علي النصيحه و محاوله مساعدتي

المشكله هي ان محتويات الميمو التي كنت ارسلها كان لها حد معين و لا ترسل اكثر منه مثلا 1000 حرف

انا وجدت هذا الكود و اظن انه سيحل مشكلتي

Procedure SendBuffer(strInput:String);
Var
x			   :integer;
Temp			:string;
begin
X := length(strInput);
holdstr := strinput;

if x > 4096 then
  begin
	Repeat
	Temp := copy(strInput,0,4096);
	//should copy 4096 (4kb)

	socket.Socket.SendText ( (IntTostr(Length(Temp)))+ '|' + (Temp ));
	//sends amount of data + data

	Delete(Strinput,0,length(temp));
	//deletes length of data sent from orginal string,

	dec(x,length(temp));
	//decreases amount left to send

	Until x <= 0

  end else
  socket.Socket.SendText(StrInput);
  end;
#4

صح الحل شبيه بالكود اللى وضعته يعني تستخدم ,for,Repeat,while

ولابد الموضوع يكون بكل الطرفين الكلينت والسيرفر

مثلا

المرسل

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s: string;
  i: Integer;
begin
  s := 'BEGIN';
  for i := 0 to 40000 do
	s := s + 'X';
  s := s + 'END';
  s := IntToStr(Length(s))+ '|'+ s; //Example: 40009|BEGINXXXXXXXXXXXXXX...etc...END
  clientsocket1.Socket.SendBuf(s[1], length(s));
end;

المستقبل

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Received, sLength : String;
begin
Received := Socket.ReceiveText;
sLength := Copy(Received, 1, Pos('|', Received) - 1); //extracts the number before '|'
Delete(Received, 1, Pos('|', Received)); //deletes the number and the '|'
While Length(Received) < StrToInt(sLength) do
	  Received := Socket.ReceiveText;

Label1.caption := IntToStr(Length(Received));
end;
#5

هل يمكن المساعدة بمثال لـ CLIENTS AND SERVER

للتعامل مع تراسل البيانات زى المثال لتموجود لكن على دلفي 7

ما عرفت استخدمها للاسف

هل ممكن تعطونى مثال بهيك شغلى للضرورة

بارك الله فيكم

#6
اقتباس
هل للمعلومات التي ترسل بين كلينت و سيرفر لها حدود معينه

حدود لا لكنك تستعمل Buffer الذي له حدود

ايضا اي Packet يبعث في الشبكة له حد معين

والحل كما قال الإخوة تقسيم ما تريد ارسالة و يبعث في دفعات واحدة تلو الأخرى

والسلام عليكم ورحمة الله

قطرة الماء تـثـقب الحجر.. لا بالعنف. لكن بتكرار المحاولة

at4re.gif

منتديات الفريق العربي للهندسة العكسية 不喜欢的勿入! www.at4re.com

هذا الموضوع مغلق.

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

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

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

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

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