PDA

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



manvaputra
یک شنبه 07 مهر 1387, 00:26 صبح
پیش نیاز:

ارتباط TCP در جاوا (http://barnamenevis.org/forum/showthread.php?t=119875)

Thread در جاوا (قسمت اول:مفاهیم اولیه Thread) (http://barnamenevis.org/forum/showthread.php?t=123116)

Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread) (http://barnamenevis.org/forum/showthread.php?t=123261)

Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable) (http://barnamenevis.org/forum/showthread.php?t=123547)


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

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

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

سارامجیدی
چهارشنبه 08 آبان 1387, 10:07 صبح
سلام
خیلی ممنون از آموزش کامل و کدهایی که در مورد برنامه چت سرور گذاشتین
از بگم من خیلی تازه کارم و اگه سوالاتم خیلی پیش پا افتاده است ببخشید
من همشونو داونلود کردم
اما نمیدونم چطور خروجی رو ببینم
کامپایلش خیلی زمان میبره
من از NetBeans استفاده میکنم و نمیدونم برای اجرا باید چه مراحلی رو دنبال کنم
لطفا منو راهنمایی کنین

manvaputra
چهارشنبه 08 آبان 1387, 12:29 عصر
با سلام شما کافیه توی نت بینز دو تا فایل جدید باز کنید و مدها رو کپی کنید اونجا بعد اول فایل مربوط به سرور رو اجرا کنید البته به این صورت که روی نام فایل کلیک راست کنید بعد گزینه run رو انتخاب کنید و بعد به همین روش کلاینت رو هم اجرا کنید توی بخش output که پایین صفحه نت بینز میاد میشه خروجی رو دید.
اگه احساس می کنید توضیحات نتونسته کمک کنه بگید تا کلا برقراری چت ساده با نت بینزو بذارم تو سایت.

سارامجیدی
چهارشنبه 08 آبان 1387, 14:37 عصر
خیلی ممنون از راهنماییتون
من این کار رو انجام دادم اما ازم ارور میگیره
این کل اون چیزیه در خروجی نشون میده
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
چهارشنبه 08 آبان 1387, 16:19 عصر
میشه بگید دقیقا چه مراحلی رو طی می کنید؟

mohsensaghafi
چهارشنبه 08 آبان 1387, 16:35 عصر
سلام دوست من.
با تشکر از manvaputra باید بگم که این برنامه رو شخصا تست کردم و کاملا درست کامپایل می شه. احتمالی که من می دم، اینه که شما فایل های جدیدی رو که درست می کنید با نام کلاسهای برنامه یکسان نیست. شما باید فایل هایی با نام های Threadclientبرای کلاینک و Threadserver برای سرور درست کنید بعد متن این کلاسها را از فایل های Atach شده کپی کنید. در netBeans هم گرینه ی new JavaClass رو برای ایجاد فایل ها انتخاب کنید.
یا حق!

سارامجیدی
یک شنبه 12 آبان 1387, 09:25 صبح
با تشکر از دوستان
مراحلی که من دنبال میکنم
اول در 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
یک شنبه 12 آبان 1387, 15:24 عصر
با سلام مجدد طبق روالی که رفتید مشکلی نداره من برای اطمینان مجددا چک کردم الان ولی یه نکته توی برنامه شما داره از chat/Threadserver ایراد می گیره! به نظر این chat/ اضافه میاد ببینید کجا اشتباهن نوشتید مطمئن باشید تا حل کامل مشکل با شما هستیم

mohsensaghafi
دوشنبه 13 آبان 1387, 02:32 صبح
سلام دوست من.
اول یه پروژه جدید باز کن و اسمی رو برای وارد کن.

http://www.freezpic.com/images/8b5gsospusy2qvwcgy5.jpg

http://www.freezpic.com/images/vsgv8q7cb94xmzr7ksh1.jpg

* - پروژه شما ساحته می شود. جال باید فایل ها رو بسازید. بر روی قسمت مشحص شده راست کلیک کنید و new سپس Java Class رو انتخاب کنید.
http://www.freezpic.com/images/fq63rt30bzews6quo49.jpg

احتمالا مشکل قبلی شما در ایجاد نکردن این فایل بوده است ( بر اساس آخرین مطلب ارسالی شما)
http://www.freezpic.com/images/w1du4exz7i05vsg48br6.jpg

حال کد برنامه را کپی کنید و در فایل ایجاد شده past کنید.
http://www.freezpic.com/images/rkalnd7smsy9tyit3tz8.jpg

http://www.freezpic.com/images/9cohfos8o1oqv5d67kf.jpg

جال برنامه را اجرا کنید.
http://www.freezpic.com/images/k9qigugu47jlxh2c119.jpg

برای ایجاد فایل Client مراحل بالا را از قسمتی که با * مشخص شده ، دوباره انجام دهید.
http://www.freezpic.com/images/yxj410oyhm3zu3epzseh.jpg

http://www.freezpic.com/images/helzajjkbsjzku5h4dy6.jpg

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

سارامجیدی
دوشنبه 13 آبان 1387, 07:54 صبح
سلام
خیلی خیلی ممنون بابت زحمتی که کشیدین
منم مراحل رو همونطور دنبال کردم اما نتیجه همون قبلی شد

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
دوشنبه 20 آبان 1387, 07:21 صبح
سلام دوست من.
پسوند فایل ها رو به .java تغییر بده. یعنی مثلا فایل سرور بشه : Threadserver.java . کلاینت هم همین طور. بعد کل فایل رو Copy کن و توسی یه پروژه ای که قبلا ساختی تو یکی از Package ها Past کن. روش راست کلیک و Run file رو بزن. واسه کلاینت هم همین طور.
امید وارم که درست بشه.

rahimi69
چهارشنبه 21 مرداد 1388, 13:53 عصر
اشکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.من این برنامه رو دارم و خیلی خوب کار می کنه ،هر کس می خواد می تونه بهم ایمیل بزنه تا من کل برنامه رو واسش attach کنم.


یا حق

rahimi69
چهارشنبه 21 مرداد 1388, 14:01 عصر
اشکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.من این برنامه رو دارم و خیلی خوب کار می کنه .
هر کس اشکال یا سوالی داره،تا اونجایی که می تونم بهش کمک می کنم،اینم ایمیلم:

rahimi_saeideh@yahoo.com

فایل رو واستون اتچ کردم فقط کافیه اونو تو netbeans اجرا کرده و نتیجه رو ببینین.


یا حق

manvaputra
دوشنبه 02 شهریور 1388, 20:01 عصر
شکال این تکه برنامه تو اینه که این برنامه اصلا کلاس main نداره. شما فقط Theradها رو برنامه نویسی کردین و اصلا کلاس mainدرست نکردین.

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

manvaputra
دوشنبه 02 شهریور 1388, 20:04 عصر
من این برنامه رو دارم

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

java.source.ir
پنج شنبه 12 شهریور 1388, 23:05 عصر
با سلام خدمت همه دوستان
برنامه ای را که دوست عزیزمان manvaputra در این تاپیک قرار داده اند، اجرا نمودم؛ که بدون هیچ گونه مشکلی اجرا شد.

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

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

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


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

pegetive_2010
پنج شنبه 13 خرداد 1389, 10:25 صبح
سلام.اول از همه تشکر میکنم از شما بابت گذاشتن این مطلب مفید
سوالی که برای من پیش اومد این هست که اگه من بخوام یک سرور داشته باشم که 2 تا کلاینت رو بهم مرتبط کنه تا فقط اون 2 تا کلاینت بخوان با هم چت کنند چیکار باید کرد؟
منظورم اینه که کافیه کد کلاینت رو در 2 سیستم کپی کنیم و ترد رو از روی سرور برداشته و ادامه بدیم؟

مرسی.

jlover
پنج شنبه 13 خرداد 1389, 18:36 عصر
سلام.اول از همه تشکر میکنم از شما بابت گذاشتن این مطلب مفید
سوالی که برای من پیش اومد این هست که اگه من بخوام یک سرور داشته باشم که 2 تا کلاینت رو بهم مرتبط کنه تا فقط اون 2 تا کلاینت بخوان با هم چت کنند چیکار باید کرد؟
منظورم اینه که کافیه کد کلاینت رو در 2 سیستم کپی کنیم و ترد رو از روی سرور برداشته و ادامه بدیم؟

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

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

mohajer189
پنج شنبه 15 دی 1390, 19:45 عصر
آقا مرسی.یه راهنمایی هم درباره تبدیل از حالت کنسول به حالت فرم و.......بکنید.به جای اجرا در کنسول دریافت اطلاعات در فرم باشه

manvaputra
چهارشنبه 21 دی 1390, 13:35 عصر
با سلام ، حالت فرمش هم کاری نداره شما فرمتو طراحی کن ، بعد او دریافت و ارسال اطلاعات رو توی مثلا textbox نمایش بده.

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

nilofar22
یک شنبه 13 اسفند 1391, 00:28 صبح
باسلام خدمت همه دوستان عزیز.من میخوام بااستفاده از سوکت و ترد برنامه ای بنویسم که کامپیوترشماره1به کامپیوتر شماره 2و3 داده هایی را ارسال کند و کامپیوتر های 2و3 این داده ها را مرتب کرده وسپس به کامپیوتر شماره 4 بفرستد.نمیدونم از کجا باید شروع کنم.اگه راهنمایی کنید یه دنیا ممنون میشم

pro_mvb
سه شنبه 15 اسفند 1391, 00:10 صبح
باسلام خدمت همه دوستان عزیز.من میخوام بااستفاده از سوکت و ترد برنامه ای بنویسم که کامپیوترشماره1به کامپیوتر شماره 2و3 داده هایی را ارسال کند و کامپیوتر های 2و3 این داده ها را مرتب کرده وسپس به کامپیوتر شماره 4 بفرستد.نمیدونم از کجا باید شروع کنم.اگه راهنمایی کنید یه دنیا ممنون میشم

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

nilofar22
سه شنبه 15 اسفند 1391, 21:30 عصر
ممنون بابت راهنماییت.ولی من با کد سوکت و ترد اشنا نیستم راستی باید کامپیوترهای شماره 2و3 داده ها را مرتب کنن بعد به کامپیوتر4بفرستندرابطه شان مثل درخت میماند.اگه یه مثال از سوکت وترد نوشته شده در نت بینز را بهم نشون بدیدممنون میشم

gholami.vahid
دوشنبه 28 اسفند 1391, 14:10 عصر
پیش نیاز:

ارتباط TCP در جاوا (http://barnamenevis.org/showthread.php?t=119875)

Thread در جاوا (قسمت اول:مفاهیم اولیه Thread) (http://barnamenevis.org/showthread.php?t=123116)

Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread) (http://barnamenevis.org/showthread.php?t=123261)

Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable) (http://barnamenevis.org/showthread.php?t=123547)


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

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



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













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

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

spiderman200700
دوشنبه 28 اسفند 1391, 15:13 عصر
من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
http://barnamenevis.org/showthread.php?119875-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-TCP-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7&p=1420757&viewfull=1#post1420757

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

gholami.vahid
دوشنبه 28 اسفند 1391, 16:06 عصر
من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
http://barnamenevis.org/showthread.php?119875-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-TCP-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7&p=1420757&viewfull=1#post1420757

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

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

gholami.vahid
دوشنبه 28 اسفند 1391, 22:11 عصر
من نوشتم. میتونی برنامه رو اینجا ببینی. ولی سورسش نیست
http://barnamenevis.org/showthread.php?119875-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-TCP-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7&p=1420757&viewfull=1#post1420757

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

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

ghazal.g
دوشنبه 11 شهریور 1392, 13:46 عصر
سلام .
ممنون از اموزش هاتون . توی این برنامه چت اگه بخوایم خود پیغام هارو همراه با اطلاعاتی مثل تاریخ ارسال و دریافت پیام ذخیره داشت باشیم باید چی کار کنیم؟

elahebayati
شنبه 14 دی 1392, 13:38 عصر
با سلام. توی این تاپیک یه کلاینت به یه سرور وصل میشه. حالا اگه بخام چند کلاینت رو به یه سرور وصل کنم چی؟ یعنی سرور چند نخی نوشته بشه. میشه کمکم کنید. هدف من پیاده سازی چت چند نفره هستش.

mz70_z
چهارشنبه 07 خرداد 1393, 12:19 عصر
سلام
داخل این سایت هم یک سری اطلاعات مفید در مورد مالتی تردینگ وجود داره که می تونید ازش استفاده کنید.
http://www.hastiproject.com/?p=213

mohamad.550
سه شنبه 03 تیر 1393, 20:05 عصر
سلام
داخل این سایت هم یک سری اطلاعات مفید در مورد مالتی تردینگ وجود داره که می تونید ازش استفاده کنید.
http://www.hastiproject.com/?p=213


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

کلانتری 66
شنبه 12 مهر 1399, 20:06 عصر
سلام. این برنامه رو نوشتم و اجرا کردم (اول سرور و بعد کلاینت) هرچی داخل کنسول تایپ می کنم اتفاقی نمیفته. میشه راهنمایی کنید