خلل في Server سوكت في دلفي 2009 ؟
#1
السلام عليكم

اخواني الكرام هناك خلل في السوكت في دلفي 2009 والله اعلم؟؟؟

انظروا الصورة اسفل,,

هذا يحدث مع الدلفي 2009 وليس دلفي 7؟

[صورة: cserror.jpg]

ما الخلل بارك الله لكم؟

علماً انني استخدم clientsocket و serversocket

جزآكم الله خيرا,,, والسلام عليكم ورحمة الله
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#2
عذرا اخوآني نسيت ارفآق الملفّين,,

لو يدمجهما المشرف في المشآركة السآبقة بارك الله له,,


الملفات المرفقة
.rar   client.rar (الحجم : 226.1 ك ب / التحميلات : 51)
.rar   server.rar (الحجم : 221 ك ب / التحميلات : 52)
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#3
وعليكم السلام ورحمة الله
لا يوجد خلل أخي، كل ما في الأمر أن Delphi2009 يدعم Unicode، أي أن كل حرف يأخذ 2byte عوضا عما كان عليه في السابق كل حرف 1byte.
وبالتالي يجب عمل تحديث بعض الأكواد المكتوبة في النسخ السابقة للدلفي، وفي حالتك يجب تحويل النص قبل قراءته.

لاحظ في هذه الحالة، مثلا الدالة ReceiveText تطلب متغير AnsiString بينما كانت في السابق تطلب متغير String عاد.

في حالتك استخدام ReceiveBuf أولى من ReceiveText ...

أنصحك باستخدام مكونات Indy ICS وابتعد عن Stocket.

الحل: غير في الحدث OnClientRead كما يلي:
PHP كود :
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  
Socket: TCustomWinSocket);
var 
s: AnsiString;
begin
SetLength
(s, Socket.ReceiveLength);
SetLength(s, Socket.ReceiveBuf(Pointer(s)^, Length(s)));
memo1.Lines.Add(String(s));
end; 
بالتوفيق.
الرد
#4
شكرا لك اخي الكريم,,

اولا,, اخي لو استخدمت طريقة التحويل فهذه تنفع في حآلة الكتآبة بلأحرب الآتنيّة,,

ولكن في العربيّة تصير الأحرب ؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟ علآمات سؤآل والله المستعان

البرنامج الذي اود ان ابرمجه سيدعم العربيّة و الإنجليزّة معا,,

,,,,,

بالنسبة لمكونات ال Indy ,,, هل تدعم العربية ؟

+

هل هي سهلة الإستخدآم ك سوكت ؟؟؟

,,,

مشكلة مكونات indy ليس لديها تمآرين او tutorials كما لل Socket ؟

بارك الله لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#5
هل جربت ما كتبته لك؟
[صورة: 2igot34.jpg]

مكونات Indy أفضل ولا شك، خاصة أن CodeGear لم تعد تطور Socket
لا تبحث عن الصعوبة أو السهولة، فعندما تتعلمها ستغدو سهلة Wink

تعلمها بنفسك وستضع أنت Tutorials تشرحها فيه.
هناك موضوع في منتدى الفريق العربي للبرمجة للـ Indy.

مثالك في المرفقات مكتوب على Delphi 2010
بالتوفيق.


الملفات المرفقة
.rar   ClientServerUsingSocket.rar (الحجم : 2.68 ك ب / التحميلات : 36)
الرد
#6
إقتباس :هل جربت ما كتبته لك؟

نعم اخي جربت ذلك وكما قلت لك في المشآركة السآبقة,,, تدعم الأحرف الآتينيّة فقط,,

نفعت الطريقة معك اخي لأن جهآزك فيه الغة العربيّة,,, ولكن ماذا سيحدث لو حذفت العربية كما هو الحآل معي ؟

لن تصل الكلمة الى السيرفر بلعربية,, بل سيظهر علامآت سؤآل,, وهذا يدل على ان الكلمة لم تصل بحآلة اليونيكود,,

مشكلتي هي,, كيف ممكن ارسل نصوص يونيكود صحيحة الى الخآدم ؟ حتى تظهر النصوص بشكل اليونيكود,, يعني بختصآر,, حتى يظهر العربية حتى ولو لم يكن العربية في الجهآز,,

وآضح ؟ Smile

يعني دعني اعطيك مثآل,,

برنامج البآلتولك مثلا,, هل استخدمته ؟
من ليس لديه العربية في الجهآز لا يمكن قرآئة ما يكتب بدآخله,,

طيب على عكسه,, برنامج المآسنجر وكذلك السكيبي,,
حتى ولو لم يكن لديك العربية,, يمكنك الكتآبة و القرآئة بالغة العربية,,
وهذا ما اود فعله, وسأفعل بئذن الله Cool

اشكرك مجددا اخي الكريم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#7
AL-MOB4RM3G كتب :شكرا لك اخي الكريم,,


بالنسبة لمكونات ال Indy ,,, هل تدعم العربية ؟


بالنسبة لمشكلة العربي و التعامل ب indy ضع الأوامر بالشكل التالي
للاستقبال
كود :
Connection.IOHandler.ReadLn('',enUTF8)

للارسال (حيث Msg هي الرسالة)
كود :
Connection.IOHandler.WriteLn(Msg,enUTF8)


طبعا الفكرة هي في enUTF8 و تحتاج للمكون idglobal
لكني لم اجرب هذه الطريقة مع نظام لا يدعم اللغة العربية
جربها و أخبرني بالنتائج و لك جزيل الشكر
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم