![]() |
|
|||||||
| ثبت نام | کتابخانه فایل ها | راهنما | لیست کاربران | کلوب های کاربران | همه قسمت ها ، به عنوان خوانده شده علامت گذاری شوند |
| برنامهنویسی جاوا در این بخش میتوانید درباره مطالب مربوط به برنامهنویسی جاوا بحث و گفتگو کنید. |
![]() |
|
|
ابزار های تاپیک | طریقه نمایش |
|
|
#1 |
|
مدیر بخش
![]() ![]() ![]() ![]() ![]() تاریخ عضویت: شهریور 1386
پست: 1,042
تشکرها: 268
505 بار تشکر شده در 315 پست
|
Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)
پیش نیاز:
ارتباط TCP در جاوا Thread در جاوا (قسمت اول:مفاهیم اولیه Thread) Thread در جاوا (قسمت دوم:ایجاد ترد با استفاده از روش بسط کلاس Thread) Thread در جاوا (قسمت سوم:ایجاد ترد با استفاده از واسط Runnable) پیاده سازی چت با استفاده از مالتی ترد: در آموزش برقراری ارتباط از نوع TCP نمونه یک چت ساده پیاده سازی شد. در این برنامه موارد زیر وجود داشت که برای رفع آنها می بایست از تکنولوژی ترد استفاده شود:
همانطور که قبلا اشاره شد برای ایجاد همزمانی در برنامه می بایست از ترد استفاده کرد در برنامه چت مورد نظر دو بخش اساسی وجود دارد:
کد:
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 علاوه بر غیر فعال کردن ترد دریافت ترد ارسال نیز از درون ترد دریافت غیر فعال شود . مشکل دسترسی به ترد ارسال از درون ترد دریافت با فرستادن ترد ارسال به عنوان پارامتر به ترد دریافت حل می شود. تنها سوالی که در اینجا مطرح است چگونگی توقف یک ترد می باشد که در قسمت بعدی که بررسی متد های مربوط به ترد ها می باشد به توضیح آن می پردازیم. کد سرور و کلاینت مربوط به این آموزش ضمیمه می باشد.
__________________
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.
-- Elbert Hubbard (1856-1915)" ذکات علم نشر آن است آخرین ویرایش به وسیله manvaputra : یک شنبه 07 مهر 1387 در 04:25 صبح |
|
|
|
| 10 کاربر از manvaputra به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#2 |
|
کاربر جدید
![]() تاریخ عضویت: مهر 1387
پست: 26
تشکرها: 1
یک بار تشکر شده در یک پست
|
نقل قول: Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)
سلام
خیلی ممنون از آموزش کامل و کدهایی که در مورد برنامه چت سرور گذاشتین از بگم من خیلی تازه کارم و اگه سوالاتم خیلی پیش پا افتاده است ببخشید من همشونو داونلود کردم اما نمیدونم چطور خروجی رو ببینم کامپایلش خیلی زمان میبره من از NetBeans استفاده میکنم و نمیدونم برای اجرا باید چه مراحلی رو دنبال کنم لطفا منو راهنمایی کنین |
|
|
|
| کاربرانی که به خاطر مطلب مفید سارامجیدی از وی تشکر کردهاند: |
|
|
#3 |
|
مدیر بخش
![]() ![]() ![]() ![]() ![]() تاریخ عضویت: شهریور 1386
پست: 1,042
تشکرها: 268
505 بار تشکر شده در 315 پست
|
نقل قول: 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 (1856-1915)" ذکات علم نشر آن است |
|
|
|
| کاربرانی که به خاطر مطلب مفید manvaputra از وی تشکر کردهاند: |
|
|
#4 |
|
کاربر جدید
![]() تاریخ عضویت: مهر 1387
پست: 26
تشکرها: 1
یک بار تشکر شده در یک پست
|
نقل قول: 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 |
|
مدیر بخش
![]() ![]() ![]() ![]() ![]() تاریخ عضویت: شهریور 1386
پست: 1,042
تشکرها: 268
505 بار تشکر شده در 315 پست
|
نقل قول: Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)
میشه بگید دقیقا چه مراحلی رو طی می کنید؟
__________________
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.
-- Elbert Hubbard (1856-1915)" ذکات علم نشر آن است |
|
|
|
|
|
#6 |
|
کاربر دائمی
![]() |
نقل قول: Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)
سلام دوست من.
با تشکر از manvaputra باید بگم که این برنامه رو شخصا تست کردم و کاملا درست کامپایل می شه. احتمالی که من می دم، اینه که شما فایل های جدیدی رو که درست می کنید با نام کلاسهای برنامه یکسان نیست. شما باید فایل هایی با نام های Threadclientبرای کلاینک و Threadserver برای سرور درست کنید بعد متن این کلاسها را از فایل های Atach شده کپی کنید. در netBeans هم گرینه ی new JavaClass رو برای ایجاد فایل ها انتخاب کنید. یا حق! |
|
|
|
| کاربرانی که به خاطر مطلب مفید mohsensaghafi از وی تشکر کردهاند: |
|
|
#7 |
|
کاربر جدید
![]() تاریخ عضویت: مهر 1387
پست: 26
تشکرها: 1
یک بار تشکر شده در یک پست
|
نقل قول: 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 |
|
مدیر بخش
![]() ![]() ![]() ![]() ![]() تاریخ عضویت: شهریور 1386
پست: 1,042
تشکرها: 268
505 بار تشکر شده در 315 پست
|
نقل قول: 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 (1856-1915)" ذکات علم نشر آن است |
|
|
|
|
|
#9 |
|
کاربر دائمی
![]() |
نقل قول: Thread در جاوا (قسمت چهارم:پیاده سازی مثال چت با استفاده از مالتی ترد)
سلام دوست من.
اول یه پروژه جدید باز کن و اسمی رو برای وارد کن. ![]() ![]() * - پروژه شما ساحته می شود. جال باید فایل ها رو بسازید. بر روی قسمت مشحص شده راست کلیک کنید و new سپس Java Class رو انتخاب کنید. ![]() احتمالا مشکل قبلی شما در ایجاد نکردن این فایل بوده است ( بر اساس آخرین مطلب ارسالی شما) ![]() حال کد برنامه را کپی کنید و در فایل ایجاد شده past کنید. ![]() ![]() جال برنامه را اجرا کنید. ![]() برای ایجاد فایل Client مراحل بالا را از قسمتی که با * مشخص شده ، دوباره انجام دهید. ![]() ![]() باز هم اگر مشکلی در اجرای برنامه پیش آمده اعلام کنید. موفق و پیروز یا حق! |
|
|
|
| 2 کاربر از mohsensaghafi به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#10 |
|
کاربر جدید
![]() تاریخ عضویت: مهر 1387
پست: 26
تشکرها: 1
یک بار تشکر شده در یک پست
|
نقل قول: 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) دقیقا همون مشکل قبلی... |
|
|
|
![]() |
| بوک مارک کردن این تاپیک |
| کاربرانی که این تاپیک را مشاهده میکنند: 1 (0 کاربران و 1 مهمان) | |
| ابزار های تاپیک | |
| طریقه نمایش | |
|
|