سلام
همانطور که در انتهای بخش قبل قول داده بودم ، میخواستم درباره حالتی از سرور صحبت کنم که به طور اتومات دربرابر Command های کاربر عکس العمل نشان نمیدهد (مد دوم) ولی بنا به دلایلی این بحث را به آینده موکول میکنم .
امروز درباره کامپوننت TIDTcpClient توضیح خواهم داد :
اگر سه بخش قبل را فهمیده باشید ، فهمیدن این قسمت زیاد وقت شما را نمیگیرد.کافیست یک کامپوننت TIDTcpclient (در برگهIndy Client ، اولین کامپوننت است ) را روی فرم جدیدی که ایجاد کرده اید قرار دهید تا 80 درصد راه ساخت client را طی کرده باشید ..!
20 درصد باقیمانده موضوع این بخش از مقاله است .
سروری که در بخش قبل ایجاد کردیم را به خاطر بیاورید .. دو دستور داشت به نامهای Hello و Add . میخواهیم client خود را برای برقراری ارتباط با این سرور تنظیم کنیم.
روی فرم خود علاوه بر کامپوننت TIDTcpClient دو Button ویک Tlistbox هم قرار دهید . در این Listbox شما مقادیری که برای عمل جمع به سرور ارسال خواهید کرد را قرار خواهید داد . حالا باید مقادیر پورت ( Port ) و Host را برای TIDTcpClient ست کنید .
Port همان است که برای سرور قرار داده اید ( در مثال ما 1001 است ).
اما Host :
اگر می خواهید برنامه client را در همان کامپیوتری اجرا کنید که سرور هم روی آن اجرا میشود مقدار Host را برابر 127.0.0.1 قرار دهید وگرنه مقدار آن را برابر با IP کامپیوتر سرور قرار دهید .
ابتدا دستور Hello :
روی اولین button دوبار کلیک کرده و کد زیر را وارد کنید :
procedure TForm1.Button1Click(Sender:TObject);
begin
with IdTcpClient1 do
begin
connect;
Writeln('Hello');
ShowMessage(Readln);
Disconnect;
end;
end;
حالا برنامه را اجرا کنید ( فراموش نکنید که همواره قبل از اجرای برنامه Client حتما باید برنامه سرور را Run کرده باشید وگرنه با پیغام " Socket Error #10061" مواجه خواهید شد ). اگر تمام مراحل را بدرستی طی کرده باشید باید پیغام "Ok, I have responded" دریافت کنید .
حالا نوبت دومین دستور است . اینبار روی دومین button دوبار کلیک کرده و قطعه کد ساده زیر را وارد کنید :
procedure TForm1.Button2Click(Sender:TObject);
var
command: string;
i:integer;
begin
command:='Add';
for i:=0 to ListBox1.Items.Count -1 do
command:=command+' '+ListBox1.Items[i];
with IdTcpClient1 do
begin
connect;
Writeln(command);
ShowMessage(Readln);
Disconnect;
end;
end;
تنها تفاوت آن با قبلی این است که در اینجا ما دستور add را با پارامترهایی که در listbox وارد کرده اید ترکیب کرده و حاصل را که یک String است برای سرور ارسال میکنیم.
نکته :
هنگام ارسال و دریافت یک پیغام بین Client و Server حتما به ترتیب متد های ارسال دقت لازم را داشته باشید .. مثلا اگر در سمت سرور چیزی مانند زیر داشتید :
WriteStream (...);
Writeln(...);
ReadStream(...);
در سمت کلاینت باید به این ترتیب باشد :
ReadStream(...);
ReadLn;
WriteStram(...);
در حالات دیگر ( اگر ترتیب را رعایت نکنید ) قادر به برقراری درست ارتباط نخواهید بود.
خوب ... کار Client هم تمام شد . در واقع مطالب مقدماتی ای که فکر میکردم برای شروع کار لازم دارید (تا حد امکان ساده و سریع ) تمام شد .
منبع اصلی این نوشته را ( که البته بنده سعی کردم ترجمه ای ساده و خلاصه از آن داشته باشم ) می توانید در سایت Delphi3000.com پیدا کنید .
موفق باشید ...