نمایش نتایج 1 تا 34 از 34

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

  1. #1

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

    پیش نیاز:

    ارتباط 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 علاوه بر غیر فعال کردن ترد دریافت ترد ارسال نیز از درون ترد دریافت غیر فعال شود .
    مشکل دسترسی به ترد ارسال از درون ترد دریافت با فرستادن ترد ارسال به عنوان پارامتر به ترد دریافت حل می شود. تنها سوالی که در اینجا مطرح است چگونگی توقف یک ترد می باشد که در قسمت بعدی که بررسی متد های مربوط به ترد ها می باشد به توضیح آن می پردازیم.

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


    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله manvaputra : یک شنبه 07 مهر 1387 در 03:55 صبح
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  2. #2

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

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

  3. #3

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

    با سلام شما کافیه توی نت بینز دو تا فایل جدید باز کنید و مدها رو کپی کنید اونجا بعد اول فایل مربوط به سرور رو اجرا کنید البته به این صورت که روی نام فایل کلیک راست کنید بعد گزینه run رو انتخاب کنید و بعد به همین روش کلاینت رو هم اجرا کنید توی بخش output که پایین صفحه نت بینز میاد میشه خروجی رو دید.
    اگه احساس می کنید توضیحات نتونسته کمک کنه بگید تا کلا برقراری چت ساده با نت بینزو بذارم تو سایت.
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  4. #4

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

    خیلی ممنون از راهنماییتون
    من این کار رو انجام دادم اما ازم ارور میگیره
    این کل اون چیزیه در خروجی نشون میده
    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)

  5. #5

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

    میشه بگید دقیقا چه مراحلی رو طی می کنید؟
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  6. #6
    کاربر دائمی آواتار mohsensaghafi
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    و نپرسیم کجاییم. بو کنیم اطلسی تازه بیمارستان را
    پست
    338

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

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

  7. #7

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

    با تشکر از دوستان
    مراحلی که من دنبال میکنم
    اول در 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

  8. #8

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

    با سلام مجدد طبق روالی که رفتید مشکلی نداره من برای اطمینان مجددا چک کردم الان ولی یه نکته توی برنامه شما داره از chat/Threadserver ایراد می گیره! به نظر این chat/ اضافه میاد ببینید کجا اشتباهن نوشتید مطمئن باشید تا حل کامل مشکل با شما هستیم
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  9. #9
    کاربر دائمی آواتار mohsensaghafi
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    و نپرسیم کجاییم. بو کنیم اطلسی تازه بیمارستان را
    پست
    338

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

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





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


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


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




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


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




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

  10. #10

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

    سلام
    خیلی خیلی ممنون بابت زحمتی که کشیدین
    منم مراحل رو همونطور دنبال کردم اما نتیجه همون قبلی شد
    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)
    دقیقا همون مشکل قبلی...


  11. #11
    کاربر دائمی آواتار mohsensaghafi
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    و نپرسیم کجاییم. بو کنیم اطلسی تازه بیمارستان را
    پست
    338

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

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

  12. #12

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

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

    یا حق

  13. #13

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

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

    یا حق
    فایل های ضمیمه فایل های ضمیمه

  14. #14

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

    شکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.
    دوست عزیز سلام شما اگه مراحل این آموزش رو از اول قدم به قدم طی می کردید حتی توی صفحه قبل متوجه وجود تابع main می شدید . و اصولا سوال فلسفی اینجاست که برنامه چطور بدوم تابع main امکان اجرا شدن داره!
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  15. #15

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

    من این برنامه رو دارم
    اصولا هدف از این تاپیک آموزش بوده نه ارایه برنامه! برنامه شما رو هم چک کردم هیچ جای این آموزش از کد شما کپی برداری نشده پس دوست عزیز بهتره بگیم شما برنامه ای مشابه کد موجود در این آموزش رو دارید
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  16. #16
    کاربر دائمی آواتار java.source.ir
    تاریخ عضویت
    اردیبهشت 1388
    پست
    209

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

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

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

    موفق و سربلند باشید.
    آخرین ویرایش به وسیله java.source.ir : پنج شنبه 12 شهریور 1388 در 23:07 عصر دلیل: غلط تایپی

  17. #17

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

    * بهتر است دوست عزیزمان manvaputra نحوه اجرای اینگونه برنامه ها را نیز به دوستان آموزش دهند تا جای هیچ گونه شک و شبهه ای باقی نماند. (البته این یک پیشنهاد است و امیدوارم رنجش خاطر manvaputra عزیز را فراهم نکرده باشد.)
    سلام دوست عزيز ممنون از پيشنهادتون ، حتما ، راستي اگه مايليد مي تنونيد نحوه اجرا رو خودتون آموزش بديد من هميشه از كار گروهي بيشتر خوشم مياد تا تك نفره
    با تشكر
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  18. #18

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

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

    مرسی.

  19. #19
    کاربر دائمی آواتار jlover
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    زیر میز کامپیوترم !
    سن
    39
    پست
    314

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

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

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

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

  20. #20

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

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

  21. #21

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

    با سلام ، حالت فرمش هم کاری نداره شما فرمتو طراحی کن ، بعد او دریافت و ارسال اطلاعات رو توی مثلا textbox نمایش بده.
    One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man (Elbert Hubbard)

  22. #22
    کاربر جدید آواتار sniper_I
    تاریخ عضویت
    آبان 1388
    محل زندگی
    A Cold Mountain
    سن
    36
    پست
    29

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

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

  23. #23

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

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

  24. #24

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

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

  25. #25

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

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

  26. #26

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

    نقل قول نوشته شده توسط manvaputra مشاهده تاپیک
    پیش نیاز:

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

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

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

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


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

    در آموزش برقراری ارتباط از نوع TCP نمونه یک چت ساده پیاده سازی شد. در این برنامه موارد زیر وجود داشت که برای رفع آنها می بایست از تکنولوژی ترد استفاده شود:
    نقل قول نوشته شده توسط manvaputra مشاهده تاپیک
    • کلاینت شروع کننده و خاتمه دهنده چت بود بدین معنا که سرور نمی توانست قبل از اینکه پیامی از کلاینت دریافت کند اقدام به ارسال پیام نمیاد.
    • مکالمه بصورت یک در میان بود یعنی کلاینت مطلبی را ارسال می کرد و خود در حالت شنود قرار می گرفت در طرف دیگر سرور که در حالت شنود بود پیام را دریافت نموده و به حالت ارسال تغییر وضعیت می داد.
    • مکالمه با ارسال 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 های ورودی و خروجی ایجاد شده به عنوان پارامتر به این دو ترد ارسال می شود. حال کافیست دو ترد مورد نظر را اجرا کنیم:


    [code]Tsend.start();
    Trecv.start();[/code



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

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


  27. #27

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

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

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

  28. #28

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

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

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

  29. #29

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

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

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

  30. #30

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

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

  31. #31

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

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

  32. #32

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

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

  33. #33

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

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

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

  34. #34

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

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •