# فناوری جاوا > برنامه‌نویسی جاوا > مقاله: Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)

## manvaputra

پیش نیاز:

ارتباط TCP در جاوا

Thread در جاوا (قسمت اول:مفاهیم اولیه Thread)

Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread)

Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable)


*پیاده سازی چت با استفاده از مالتی ترد:*

در آموزش برقراری ارتباط از نوع TCP نمونه یک چت ساده پیاده سازی شد. در این برنامه موارد زیر  وجود داشت که برای رفع آنها می بایست از تکنولوژی ترد استفاده شود:

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

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


بخشی که مسئول دریافت اطلاعات از کاربر و ارسال آنها      می باشد.
sendstring=inp.next();  
output.writeUTF (sendstring);
 
بخشی که مسئول دریافت اطلاعات از سمت ارسال کننده و      نمایش آنها می باشد.
request = input.readUTF ();
System.out.println(request); 
هر دو بخش بالا باید بصورت ترد هایی جداگانه ایجاد شوند. در زیر نحوه پیاده سازی این دو بخش آمده است لازم به ذکر است که هر دو از روش بسط کلاس ترد ساخته شده اند:

ارسال اطلاعات:


class send extends Thread
{
private DataOutputStream output;

public send(DataOutputStream s) throws Exception{
       output=s;
  }    
public void run()
{ 
String sendstring="";    
do{
 Scanner inp = new Scanner(System.in);
  try{
  sendstring=inp.next();  
  output.writeUTF (sendstring);     
    }catch(IOException e){}
      }while(true);
}
} دریافت اطلاعات:

    class recv extends Thread
  {
  private DataInputStream input;
  private DataOutputStream output;
  
  public recv(DataInputStream s,DataOutputStream t) throws Exception{
            input=s;
            output=t;
      }    
  public void run()
  { 
  String request="";   
   do{
     try{
      request=input.readUTF();
    if (request.equals("Q")){
             output.writeUTF("Q");
             System.exit(0);}
       System.out.println("CLIENT:"+request);     
       }catch(IOException e){}
      }while(true);
  
  }
  }
   ما بقی آنچه در برنامه مشاده می کنید مانند همان مثال اولیه می باشد. فقط کافیست بعد از انجام مراحل اولیه که همان ایجاد سوکت - ایجاد ارتباط – و معرفی Stream های ورودی و خروجی دو ترد از انواع ایجاد شده در بالا تعریف نمود:
send Tsend =new send(output); 
recv Trecv=new recv(input,output);
 Stream های ورودی و خروجی ایجاد شده به عنوان پارامتر به این دو ترد ارسال می شود. حال کافیست دو ترد مورد نظر را اجرا کنیم:


Tsend.start();
Trecv.start(); برای خاتمه برنامه از متد System.exit(0)  استفاده شده است یعنی چه کلاینت و چه سرور با دریافت کارکتر Q کل سیستم را  متوقف می کنند. این روش به غیر از ساده سازی آموزش بالا استفاده دیگری برای ما ندارد چون طبیعیست قرار نیست کا برنامه ما با بسته شدن ارتباط دو نفر به طور کامل متوقف شود!!! چاره چیست ؟؟ استفاده از حلقه While و گذاشتن شرط تا این مرحله جوابگو نمی باشد چرا که به فرض دریافت Q در قسمت مربوط به دریافت اطلاعات فقط این بخش را می توانیم متوقف کنیم(اگر شرطWhile  باشد) و بخش مربوط به ارسال همچنان فعال باقی می ماند چون اصولا دریافت و ارسال دو ترد جداگانه هستند  چاره کار در این است که بعد از دریافت Q علاوه بر غیر فعال کردن ترد دریافت ترد ارسال نیز از درون ترد دریافت غیر فعال شود .
مشکل دسترسی به ترد ارسال از درون ترد دریافت با فرستادن ترد ارسال به عنوان پارامتر به ترد دریافت حل می شود. تنها سوالی که در اینجا مطرح است چگونگی توقف یک ترد می باشد که در قسمت بعدی که بررسی متد های مربوط به ترد ها می باشد به توضیح آن می پردازیم.

کد سرور و کلاینت مربوط به این آموزش ضمیمه می باشد.

----------


## سارامجیدی

سلام
خیلی ممنون از آموزش کامل و کدهایی که در مورد برنامه چت سرور گذاشتین
از بگم من خیلی تازه کارم و اگه سوالاتم خیلی پیش پا افتاده است ببخشید
من همشونو داونلود کردم
اما نمیدونم چطور خروجی رو ببینم
کامپایلش خیلی زمان میبره
من از NetBeans استفاده میکنم و  نمیدونم برای اجرا باید چه مراحلی رو دنبال کنم 
لطفا منو راهنمایی کنین

----------


## manvaputra

با سلام شما کافیه توی نت بینز دو تا فایل جدید باز کنید و مدها رو کپی کنید اونجا بعد اول فایل مربوط به سرور رو اجرا کنید البته به این صورت که روی نام فایل کلیک راست کنید بعد گزینه run رو انتخاب کنید و بعد به همین روش کلاینت رو هم اجرا کنید توی بخش output که پایین صفحه نت بینز میاد میشه خروجی رو دید.
اگه احساس می کنید توضیحات نتونسته کمک کنه بگید تا کلا برقراری چت ساده با نت بینزو بذارم تو سایت.

----------


## سارامجیدی

خیلی ممنون از راهنماییتون
من این کار رو  انجام دادم اما ازم ارور میگیره
این کل اون چیزیه در خروجی نشون میده
java.lang.NoClassDefFoundError: threadclient
Caused by: java.lang.ClassNotFoundException: threadclient
        at java.net.URLClassLoader$1.run(URLClassLoader.java:  200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.j  ava:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:3  06)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launche  r.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:2  51)
        at java.lang.ClassLoader.loadClassInternal(ClassLoade  r.java:319)
Exception in thread "main" 
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

----------


## manvaputra

میشه بگید دقیقا چه مراحلی رو طی می کنید؟

----------


## mohsensaghafi

سلام دوست من.
با تشکر از manvaputra باید بگم که این برنامه رو شخصا تست کردم و کاملا درست کامپایل می شه. احتمالی که من می دم، اینه که شما فایل های جدیدی رو که درست می کنید با نام کلاسهای برنامه یکسان نیست. شما باید فایل هایی با نام های Threadclientبرای کلاینک و Threadserver برای سرور درست کنید بعد متن این کلاسها را از فایل های Atach شده کپی کنید. در netBeans هم گرینه ی new JavaClass رو برای ایجاد فایل ها انتخاب کنید.
یا حق!

----------


## سارامجیدی

با تشکر از دوستان
مراحلی که من دنبال میکنم
اول  در Netbeans یه پروژه جدید ایجاد میکنم
در اون پروژه یه New file... ایجاد میکنم و اسم اون رو Treadserver میذارم
کل محتویاتش رو پاک میکنم و محتویات فایل Threadserver که Attach شده رو داخلش کپی میکنم
روی اسم کلاس راست کلیک میکنم و Run File رو میزنم
که بهم خروجی زیر رو میده:
java.lang.NoClassDefFoundError: chat/Threadserver
Caused by: java.lang.ClassNotFoundException: chat.Threadserver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:  200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.j  ava:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:3  06)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launche  r.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:2  51)
        at java.lang.ClassLoader.loadClassInternal(ClassLoade  r.java:319)
Exception in thread "main" 
Java Result: 1

----------


## manvaputra

با سلام مجدد طبق روالی که رفتید مشکلی نداره من برای اطمینان مجددا چک کردم الان ولی یه نکته توی برنامه شما داره از chat/Threadserver ایراد می گیره! به نظر این chat/ اضافه میاد ببینید کجا اشتباهن نوشتید مطمئن باشید تا حل کامل مشکل با شما هستیم

----------


## mohsensaghafi

سلام دوست من.
اول یه پروژه جدید باز کن و اسمی رو برای وارد کن.





* - پروژه شما ساحته می شود. جال باید فایل ها رو بسازید. بر روی قسمت مشحص شده راست کلیک کنید و new سپس Java Class رو انتخاب کنید.


احتمالا مشکل قبلی شما در ایجاد نکردن این فایل بوده است ( بر اساس آخرین مطلب ارسالی شما)


حال کد برنامه را کپی کنید و در فایل ایجاد شده past کنید.




جال برنامه را اجرا کنید.


برای ایجاد فایل Client مراحل بالا را از قسمتی که با * مشخص شده ، دوباره انجام دهید.




باز هم اگر مشکلی در اجرای برنامه پیش آمده اعلام کنید.
موفق و پیروز
یا حق!

----------


## سارامجیدی

سلام 
خیلی خیلی ممنون بابت زحمتی که کشیدین 
منم مراحل رو همونطور دنبال کردم اما نتیجه همون قبلی شد
java.lang.NoClassDefFoundError: thchat/Threadserver
Caused by: java.lang.ClassNotFoundException: thchat.Threadserver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:  200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.j  ava:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:3  06)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launche  r.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:2  51)
        at java.lang.ClassLoader.loadClassInternal(ClassLoade  r.java:319)
Exception in thread "main" 
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
دقیقا همون مشکل قبلی...

----------


## mohsensaghafi

سلام دوست من. 
پسوند فایل ها رو به .java تغییر بده. یعنی مثلا فایل سرور بشه : Threadserver.java . کلاینت هم همین طور. بعد کل فایل رو Copy کن و توسی یه پروژه ای که قبلا ساختی تو یکی از Package  ها Past کن. روش راست کلیک و Run file رو بزن. واسه کلاینت هم همین طور. 
امید وارم که درست بشه.

----------


## rahimi69

اشکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.من این برنامه رو دارم و خیلی خوب کار می کنه ،هر کس می خواد می تونه بهم ایمیل بزنه تا من کل برنامه رو واسش attach کنم.

یا حق

----------


## rahimi69

اشکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.من این برنامه رو دارم و خیلی خوب کار می کنه .
هر کس اشکال یا سوالی داره،تا اونجایی که می تونم بهش کمک می کنم،اینم ایمیلم:
rahimi_saeideh@yahoo.com فایل رو واستون اتچ کردم فقط کافیه اونو تو netbeans اجرا کرده و نتیجه رو ببینین. 
یا حق

----------


## manvaputra

> شکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.


دوست عزیز سلام شما اگه مراحل این  آموزش رو از اول قدم به قدم  طی می کردید حتی توی صفحه قبل متوجه وجود تابع main می شدید . و اصولا سوال فلسفی اینجاست که برنامه چطور بدوم تابع main امکان اجرا شدن داره!

----------


## manvaputra

> من این برنامه رو دارم


اصولا هدف از این تاپیک آموزش بوده نه ارایه برنامه! برنامه شما رو هم چک کردم هیچ جای این آموزش از کد شما کپی برداری نشده پس دوست عزیز بهتره بگیم شما برنامه ای مشابه کد موجود در این آموزش رو دارید

----------


## java.source.ir

با سلام خدمت همه دوستان
برنامه ای را که دوست عزیزمان manvaputra در این تاپیک قرار داده اند، اجرا نمودم؛ که بدون هیچ گونه مشکلی اجرا شد. 

*** بهتر است دوست عزیزمان manvaputra نحوه اجرای اینگونه برنامه ها را نیز به دوستان آموزش دهند تا جای هیچ گونه شک و شبهه ای باقی نماند. (البته این یک پیشنهاد است و امیدوارم رنجش خاطر manvaputra عزیز را فراهم نکرده باشد.)

موفق و سربلند باشید.

----------


## manvaputra

> * بهتر است دوست عزیزمان manvaputra نحوه اجرای اینگونه برنامه ها را نیز به دوستان آموزش دهند تا جای هیچ گونه شک و شبهه ای باقی نماند. (البته این یک پیشنهاد است و امیدوارم رنجش خاطر manvaputra عزیز را فراهم نکرده باشد.)


سلام دوست عزيز ممنون از پيشنهادتون ، حتما ، راستي اگه مايليد مي تنونيد نحوه اجرا رو خودتون آموزش بديد من هميشه از كار گروهي بيشتر خوشم مياد تا تك نفره 
با تشكر

----------


## pegetive_2010

سلام.اول از همه تشکر میکنم از شما بابت گذاشتن این مطلب مفید
سوالی که برای من پیش اومد این هست که اگه من بخوام یک سرور داشته باشم که 2 تا کلاینت رو بهم مرتبط کنه تا فقط اون 2 تا کلاینت بخوان با هم چت کنند چیکار باید کرد؟
منظورم اینه که کافیه کد کلاینت رو در 2 سیستم کپی کنیم و ترد رو از روی سرور برداشته و ادامه بدیم؟

مرسی.

----------


## jlover

> سلام.اول از همه تشکر میکنم از شما بابت گذاشتن این مطلب مفید
> سوالی که برای من پیش اومد این هست که اگه من بخوام یک سرور داشته باشم که 2 تا کلاینت رو بهم مرتبط کنه تا فقط اون 2 تا کلاینت بخوان با هم چت کنند چیکار باید کرد؟
> منظورم اینه که کافیه کد کلاینت رو در 2 سیستم کپی کنیم و ترد رو از روی سرور برداشته و ادامه بدیم؟
> 
> مرسی.


ببینید یک سناریوی نظری این می تونه باشه (نظری چون اگه بخوام درگیر انجامش بشم باید یه دوره ای انجام بدم  :خجالت:  ):

سرور شما به هر دو (یا هر چند تای دیگه) کلاینت گوش میده، توی پیغام فرستاده شده از کلاینت برای سرور باید نشونی کلاینت مقصد قرار داده شده باشه، حالا سرور به عنوان واسط میاد اون پیغام رو به کلاینت مقصد میفرسته

----------


## mohajer189

آقا مرسی.یه راهنمایی هم درباره تبدیل از حالت کنسول به حالت فرم و.......بکنید.به جای اجرا در کنسول دریافت اطلاعات در فرم باشه

----------


## manvaputra

با سلام ، حالت فرمش هم کاری نداره شما فرمتو طراحی کن ، بعد او دریافت و ارسال اطلاعات رو توی مثلا textbox  نمایش بده.

----------


## sniper_I

با سلام
من یه مشکلی دارم که فقط کنم مربوط به ویزاردی بودن نت بینز میشه.
ببینید من یه Jframe تو نت بینز ساختم و ظاهرشو به دلخواه خودم عوض کردم، داخل این فرمم از چندتا thread مختلف استفاده میکنم، ولی وقتی یکی از این thread هارو sleep  میکنم یا suspend میکنم کل تردهای برنامم همشون باهم sleep یا suspend میشن. همین کارو تو یه کلاس دیگه که دستی نوشتم انجام میدم ولی هیچ مشکلی پیش نمیاد و وقتی یکی از تردها رو suspend میکنم بقیه به کارشون ادامه میدن. حدسی که من میزنم اینه که مشکل به اون بخشی مربوط میشه که خود نت بینز بصورت خودکار کدهای مربوط به فریم رو تولید میکنه. الانم چون دیگه کلی فرم طراحی کردم اصلا امکانش نیست این همرو دوباره بشینم دستی طراحی کنم. به نظرتون چی کار باید بکنم!؟؟؟؟
----------------------
مشکل حل شد. منتفیه!

----------


## nilofar22

باسلام خدمت همه دوستان عزیز.من میخوام بااستفاده از سوکت و ترد برنامه ای بنویسم که کامپیوترشماره1به کامپیوتر شماره 2و3 داده هایی را ارسال کند و کامپیوتر های 2و3 این داده ها را مرتب کرده وسپس به کامپیوتر شماره 4 بفرستد.نمیدونم از کجا باید شروع کنم.اگه راهنمایی کنید یه دنیا ممنون میشم

----------


## pro_mvb

> باسلام خدمت همه دوستان عزیز.من میخوام بااستفاده از سوکت و ترد برنامه ای بنویسم که کامپیوترشماره1به کامپیوتر شماره 2و3 داده هایی را ارسال کند و کامپیوتر های 2و3 این داده ها را مرتب کرده وسپس به کامپیوتر شماره 4 بفرستد.نمیدونم از کجا باید شروع کنم.اگه راهنمایی کنید یه دنیا ممنون میشم


چند حالت داری
یکیش اینه:
اینکه 2 و 3 به صورت مستقیم به 1 وصل بشن وread کنن از socket ، در همین زمان (در thread) هردو (3 و 2)  به 4 وصل بشن و 4 مقدار هر کدام رو بگیره!
فقط بدون که 1 و 4 باید multy server  باشن (یعنی به ازای هر کسی که بشه وصل میشه سوکتش رو بگیره و پاس بده به یه کلاس (که این کلاس در هر بار گرفتن مقدار سوکت باید new بشه) )

----------


## nilofar22

ممنون بابت راهنماییت.ولی من با کد سوکت و ترد اشنا نیستم راستی باید کامپیوترهای شماره 2و3 داده ها را مرتب کنن بعد به کامپیوتر4بفرستندرابطه شان مثل درخت میماند.اگه یه مثال از سوکت وترد نوشته شده در نت بینز را بهم نشون بدیدممنون میشم

----------


## gholami.vahid

> پیش نیاز:
> 
> ارتباط TCP در جاوا
> 
> Thread در جاوا (قسمت اول:مفاهیم اولیه Thread)
> 
> Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread)
> 
> Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable)
> ...





> کلاینت شروع کننده و خاتمه دهنده چت بود بدین معنا که      سرور نمی توانست قبل از اینکه پیامی از کلاینت دریافت کند اقدام به ارسال      پیام نمیاد.مکالمه بصورت یک در میان بود یعنی کلاینت مطلبی را      ارسال می کرد و خود در حالت شنود قرار می گرفت در طرف دیگر سرور که در حالت      شنود بود پیام را دریافت نموده و به حالت ارسال تغییر وضعیت می داد.مکالمه با ارسال QUIT از طرف کلاینت خاتمه پیدا می      کرد یعنی سرور قادر به خاتمه ارتباط نبود.
>  دلیل تمامی موارد بالا در این نکته نهفته است که برنامه ما در یک زمان عمل ارسال و دریافت را نمی توانست انجام دهد.
> 
> همانطور که قبلا اشاره شد برای ایجاد همزمانی در برنامه می بایست از ترد استفاده کرد در برنامه چت مورد نظر دو بخش اساسی وجود دارد:
> 
> 
> بخشی که مسئول دریافت اطلاعات از کاربر و ارسال آنها      می باشد.
> sendstring=inp.next();  
> output.writeUTF (sendstring);
> ...




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

اما وقتی که میخوام از طریق دکمه یک متن رو از تکس باکس بخونم و از سرور ارسال  کنم متن ارسال میشه اما کلایینت با اتمام کار تابع اول  دیگه متنی رو نمیگیره - کانکشن و input  وout put  هامو هم همشو استاتیکی کردم  از  روش ترد هم استفاده کردم اما نمیدونم مشکل از کجاست
کسی برنامه بالا رو به  صورت گرافیکی درست کرده

----------


## spiderman200700

من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
https://barnamenevis.org/showthread.p...=1#post1420757

مشکل ممکنه از خیلی جاها باشه. یه علت خاص نداره که فلان جا رو تغییر بدی درست میشه.

----------


## gholami.vahid

> من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
> https://barnamenevis.org/showthread.p...=1#post1420757
> 
> مشکل ممکنه از خیلی جاها باشه. یه علت خاص نداره که فلان جا رو تغییر بدی درست میشه.


ممنونم درست شد 
مشکل از این بود که  باید input  و output ,  رو جای مناسبی  new  نکرده بودم

----------


## gholami.vahid

> من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
> https://barnamenevis.org/showthread.p...=1#post1420757
> 
> مشکل ممکنه از خیلی جاها باشه. یه علت خاص نداره که فلان جا رو تغییر بدی درست میشه.


شرمنده
میخوام یه عکسی رو از کلاینت به سرور و برعکس انتقال بدم  اما نمیدونم که عکس رو باید چه طور به بایت تبدیل کنم اگه میشه راهنمایی کنید

----------


## ghazal.g

سلام . 
ممنون از اموزش هاتون . توی این برنامه چت اگه بخوایم خود پیغام هارو همراه با اطلاعاتی مثل تاریخ ارسال و دریافت پیام ذخیره داشت باشیم باید چی کار کنیم؟

----------


## elahebayati

با سلام. توی این تاپیک یه کلاینت به یه سرور وصل میشه. حالا اگه بخام چند کلاینت رو به یه سرور وصل کنم چی؟ یعنی سرور چند نخی نوشته بشه. میشه کمکم کنید. هدف من پیاده سازی چت چند نفره هستش.

----------


## mz70_z

سلام 
داخل این سایت هم یک سری اطلاعات مفید در مورد مالتی تردینگ وجود داره که می تونید ازش استفاده کنید.
http://www.hastiproject.com/?p=213

----------


## mohamad.550

> سلام 
> داخل این سایت هم یک سری اطلاعات مفید در مورد مالتی تردینگ وجود داره که می تونید ازش استفاده کنید.
> http://www.hastiproject.com/?p=213



گیج بنگ تاریخ تاپیک رو ببین بعد بحرف

----------


## کلانتری 66

سلام. این برنامه رو نوشتم و اجرا کردم (اول سرور و بعد کلاینت) هرچی داخل کنسول تایپ می کنم اتفاقی نمیفته. میشه راهنمایی کنید

----------

