سجاد ایوبی

نوشتن برنامه چت با سوکت پروگرمینگ بین دوبرنامه به صورت محلی

سجاد ایوبی ۱۳۹۷/۰۲/۲۷ زبان برنامه‌نویسی جاوا

دوستان من مفاهیم سوکت پروگرمینگ رو اشنایی دارم می خواستم بدونم ایا میشه بدون دونستن برنامه نویسی چندنخی بین دوتا برنامه تو سیسیتم خودم چت کنم و اگه میشه یه توضیح هم لطف کنید که مثلا باید یه برنامه سرور بسازم یا نه؟
پاسخ‌ها به این تاپیک
kernel
kernel علاقمند به هک و امنیت ، یادگیری ماشین
۱۳۹۷/۰۲/۲۸
ClientSide.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ClientSide { public static void main(String[] args) { System.out.println("\n\n\n\t\tClient Side"); Socket socket = null; PrintWriter writer = null; try { socket = new Socket("127.0.0.1" , 8585); writer = new PrintWriter(socket.getOutputStream() , true); } catch (IOException e) { e.printStackTrace(); } BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String userInputText = null; while (true){ // End Chat = userInputText = "EC" try { userInputText = reader.readLine(); } catch (IOException e) { e.printStackTrace(); continue; } if (userInputText.length() 0){ writer.println("User Write "+userInputText); if (userInputText.equals("EC")){ writer.println("\n\n\n\t\t End Chat"); break; } }else { writer.println("\n\n\n\t\tClient Send nothing..."); } System.out.println(); } } } ServerSide.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class ServerSide { public static void main(String[] args) { System.out.println("\n\n\n\t\tThis is server side"); ServerSocket serverSocket = null; BufferedReader reader = null; try { serverSocket = new ServerSocket(8585); } catch (IOException e) { e.printStackTrace(); } Socket socket = null; try { socket = serverSocket.accept(); } catch (IOException e) { e.printStackTrace(); } try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException e) { e.printStackTrace(); } String clientLine = null; while (true){ try { clientLine = reader.readLine(); if (clientLine.equals("EC")){ System.out.println("\n\n\n\t\tChat is End..."); break; } } catch (IOException e) { e.printStackTrace(); } System.out.println("\t\tClint Says : " + clientLine); } try { serverSocket.close(); reader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
سجاد ایوبی
سجاد ایوبیدولوپر اندروید، یادگیری ماشین
۱۳۹۷/۰۲/۳۰
دست درد نکنه ولی این که چت نیست این رو خیلی ساده تر میشه با scanner و formatter نوشت کلینت یه پیام میده سرور چاپ میکنه من می خام سرور چاپ که کرد بتونه دوباره به کلینت پیام بده و کلینت اون رو بخونه

در پاسخ به

omid_student
omid_student
۱۳۹۷/۰۲/۲۷
سلام پيشنهاد ميكنم برا چت از پروتكل mqtt كه سرور خوبي با نام mosquitto يا hiveMQ داره استفاده كني چت با سوكت نياز به برنامه نويسي بيشتر داره
mostafa
mostafa
۱۳۹۷/۰۲/۲۷
توی چت ساده نیاز به مالتی تردینگ ندارید ، اگر از جاوا استفاده میکنید میتونید یک سرورسوکت پیاده سازی کنید ، بعدش هم کلاینت سوکت ، کلاینت و سرور هرجفتشون باید روی یک پورت و آدرس آی پی listen کنن، کلاینت درخواست رو میفرسته سمت سرور و اونجا سرور درخواست رو میتونه پابلیش کنه به تمامی سوکتهایی که روی اون پورت و ip دارن listen میکنن ، برای کارهای پیشرفته تر هم میتونید از Java nio socketchannel استفاده کنید و میتونید SocketChannel و همچنین FileChannel پیاده سازی کنید و تحت سوکت شروع به ارسال فایل ، استریم و... کنید
سجاد ایوبی
سجاد ایوبیدولوپر اندروید، یادگیری ماشین
۱۳۹۷/۰۲/۲۸
رفیق وقتی با دوتا برنامه به یه سوکت سرور وصل میشم لا یک پرت یکسان ارور مالتی تردینگ میده چی مشکلش؟

در پاسخ به

stack programer
stack programer
۱۳۹۷/۰۲/۲۸
سلام در تکمیل گفته دوست عزیز mostafa داخل برنامه نویسی سوکت ترد وجود دارد اما وظیفه کنترل آن ها به عهده کرنل سیستم عامل است نه برنامه نویس. اگر بخواهید داخل تردهای ناحیه کرنل اسپیس دسترسی پیدا کنید می شه برنامه نویسی کرنل. هرچند این مشکلی که شما می گید وقتی یک پروسه سوکت را تحویل گرفت به وسیله سیستم عامل حالت پروتکت پیدا می کنه پس پروسه دیگه نباید بهش دسترسی داشته مگر در موارد خاص که داخل کرنل تعریف شده باشه. توصیه می کنم مراجع سیستم عامل بخش تردها یک ریویو کنید.

در پاسخ به