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

دوستان من مفاهیم سوکت پروگرمینگ رو اشنایی دارم می خواستم بدونم ایا میشه بدون دونستن برنامه نویسی چندنخی بین دوتا برنامه تو سیسیتم خودم چت کنم و اگه میشه یه توضیح هم لطف کنید که مثلا باید یه برنامه سرور بسازم یا نه؟
پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
توی چت ساده نیاز به مالتی تردینگ ندارید ، اگر از جاوا استفاده میکنید میتونید یک سرورسوکت پیاده سازی کنید ، بعدش هم کلاینت سوکت ، کلاینت و سرور هرجفتشون باید روی یک پورت و آدرس آی پی listen کنن، کلاینت درخواست رو میفرسته سمت سرور و اونجا سرور درخواست رو میتونه پابلیش کنه به تمامی سوکتهایی که روی اون پورت و ip دارن listen میکنن ، برای کارهای پیشرفته تر هم میتونید از Java nio socketchannel استفاده کنید و میتونید SocketChannel و همچنین FileChannel پیاده سازی کنید و تحت سوکت شروع به ارسال فایل ، استریم و... کنید
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
رفیق وقتی با دوتا برنامه به یه سوکت سرور وصل میشم لا یک پرت یکسان ارور مالتی تردینگ میده چی مشکلش؟
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
سلام در تکمیل گفته دوست عزیز mostafa داخل برنامه نویسی سوکت ترد وجود دارد اما وظیفه کنترل آن ها به عهده کرنل سیستم عامل است نه برنامه نویس. اگر بخواهید داخل تردهای ناحیه کرنل اسپیس دسترسی پیدا کنید می شه برنامه نویسی کرنل. هرچند این مشکلی که شما می گید وقتی یک پروسه سوکت را تحویل گرفت به وسیله سیستم عامل حالت پروتکت پیدا می کنه پس پروسه دیگه نباید بهش دسترسی داشته مگر در موارد خاص که داخل کرنل تعریف شده باشه. توصیه می کنم مراجع سیستم عامل بخش تردها یک ریویو کنید.
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
سلام پيشنهاد ميكنم برا چت از پروتكل mqtt كه سرور خوبي با نام mosquitto يا hiveMQ داره استفاده كني چت با سوكت نياز به برنامه نويسي بيشتر داره
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
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(); } } }
sokanacademy forum
کاربر سکان آکادمی 6 سال پیش
دست درد نکنه ولی این که چت نیست این رو خیلی ساده تر میشه با scanner و formatter نوشت کلینت یه پیام میده سرور چاپ میکنه من می خام سرور چاپ که کرد بتونه دوباره به کلینت پیام بده و کلینت اون رو بخونه
online-support-icon