Atheer Bis نشر 9 مارس أرسل تقرير نشر 9 مارس الان يوجد لدي هذا الكود اريد اعدل عليه بحيث يستقبل من المستخدم رقم 1 فيتم حذف الملف وعند دخول رقم اخر يتم تكرار نفس الملف اقتباس
0 Mahmoud Hassan19 نشر 9 مارس أرسل تقرير نشر 9 مارس مرحبا هنا يوجد خطأ في كود السرفر في سطر (8081) ServerSocket الخطا هنا انك كاتب السطر بداخل ال for loop بمعني ذاللك انك بتنشي object من socket كل لفه لل for ودا مش صح المفروض انك بتعمل listener مره واحد علي port 8081 يعني بتنشي object مره واحد بس فالكود هيكون بالشكل دا import java.io.*; import java.net.*; public class Server { public static void main(String args[]) { new Server().go(); } public void go() { try { ServerSocket server = new ServerSocket(8081); while (true) { Socket socket = server.accept(); new Thread(new ThreadHandler(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } } class ThreadHandler implements Runnable { private Socket socket; public ThreadHandler(Socket socket) { this.socket = socket; } public void run() { try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); int choice = Integer.parseInt(br.readLine()); if (choice == 1) { File fileToDelete = new File("clientcopy.class"); if (fileToDelete.delete()) { System.out.println("File (clientcopy.class) deleted successfully."); } else { System.out.println("Unable to delete the file."); } } else { FileOutputStream out = new FileOutputStream(new File("clientcopy.class")); int ch; while ((ch = is.read()) != -1) { out.write(ch); } out.flush(); System.out.println("File (clientcopy.class) received and saved on the server."); out.close(); } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } و client import java.io.*; import java.net.*; public class Client { public static void main(String args[]) { try { Socket sock = new Socket(args[0], 8081); System.out.println("Enter 1 to delete the file, or any other number to send the file:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int choice = Integer.parseInt(br.readLine()); PrintWriter pw = new PrintWriter(sock.getOutputStream(), true); pw.println(choice); if (choice != 1) { FileInputStream is = new FileInputStream("client.class"); OutputStream os = sock.getOutputStream(); int ch; while ((ch = is.read()) != -1) { os.write(ch); } os.flush(); System.out.println("File (client.class) sent to the server."); os.close(); is.close(); } sock.close(); } catch (Exception e) { e.printStackTrace(); } } } 1 اقتباس
0 Atheer Bis نشر 10 مارس الكاتب أرسل تقرير نشر 10 مارس بتاريخ 17 ساعة قال Mahmoud Hassan19: مرحبا هنا يوجد خطأ في كود السرفر في سطر (8081) ServerSocket الخطا هنا انك كاتب السطر بداخل ال for loop بمعني ذاللك انك بتنشي object من socket كل لفه لل for ودا مش صح المفروض انك بتعمل listener مره واحد علي port 8081 يعني بتنشي object مره واحد بس فالكود هيكون بالشكل دا import java.io.*; import java.net.*; public class Server { public static void main(String args[]) { new Server().go(); } public void go() { try { ServerSocket server = new ServerSocket(8081); while (true) { Socket socket = server.accept(); new Thread(new ThreadHandler(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } } class ThreadHandler implements Runnable { private Socket socket; public ThreadHandler(Socket socket) { this.socket = socket; } public void run() { try { InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); int choice = Integer.parseInt(br.readLine()); if (choice == 1) { File fileToDelete = new File("clientcopy.class"); if (fileToDelete.delete()) { System.out.println("File (clientcopy.class) deleted successfully."); } else { System.out.println("Unable to delete the file."); } } else { FileOutputStream out = new FileOutputStream(new File("clientcopy.class")); int ch; while ((ch = is.read()) != -1) { out.write(ch); } out.flush(); System.out.println("File (clientcopy.class) received and saved on the server."); out.close(); } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } و client import java.io.*; import java.net.*; public class Client { public static void main(String args[]) { try { Socket sock = new Socket(args[0], 8081); System.out.println("Enter 1 to delete the file, or any other number to send the file:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int choice = Integer.parseInt(br.readLine()); PrintWriter pw = new PrintWriter(sock.getOutputStream(), true); pw.println(choice); if (choice != 1) { FileInputStream is = new FileInputStream("client.class"); OutputStream os = sock.getOutputStream(); int ch; while ((ch = is.read()) != -1) { os.write(ch); } os.flush(); System.out.println("File (client.class) sent to the server."); os.close(); is.close(); } sock.close(); } catch (Exception e) { e.printStackTrace(); } } } لكن انا اريد ان يكتب الرقم في التيرمنال تبع الـ server يعني بعد ما اكتب java server واحط enter يطلب مني ادخال رقم لان حاليا يكتب في التيرمنال تبع الـ client اقتباس
0 Hikmat Jaafer نشر 19 مارس أرسل تقرير نشر 19 مارس لتحقيق طلبك، يجب إجراء بعض التعديلات على الكود. هنا هو الكود المعدل: import java.io.*; import java.net.*; public class Server { public static void main(String args[]) { new Server().go(); } public void go() { try { ServerSocket server = new ServerSocket(8081); while (true) { Socket socket = server.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); int choice = Integer.parseInt(br.readLine()); System.out.println("Received choice: " + choice); if (choice == 1) { File fileToDelete = new File("clientcopy.class"); if (fileToDelete.delete()) { System.out.println("File (clientcopy.class) deleted successfully."); } else { System.out.println("Unable to delete the file."); } } else { FileOutputStream out = new FileOutputStream(new File("clientcopy.class")); int ch; while ((ch = br.read()) != -1) { out.write(ch); } out.flush(); System.out.println("File (clientcopy.class) received and saved on the server."); out.close(); } socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } تم تحويل الـ BufferedReader من System.inإلى socket.getInputStream() لقراءة الرقم الذي يرسله العميل. وبعد ذلك، يتم طباعة الرقم الذي تم استلامه في الترمينال الخاص بالخادم. اقتباس
السؤال
Atheer Bis
الان يوجد لدي هذا الكود
اريد اعدل عليه بحيث يستقبل من المستخدم رقم 1 فيتم حذف الملف
وعند دخول رقم اخر يتم تكرار نفس الملف
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.