اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

مرحبا
هنا يوجد خطأ في كود السرفر  في سطر (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();
        }
    }
}

 

  • 0
نشر
بتاريخ 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

image.thumb.png.02d18b705314fcd8ba8fcdb71e817f99.png

  • 0
نشر

لتحقيق طلبك، يجب إجراء بعض التعديلات على الكود. هنا هو الكود المعدل:

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() لقراءة الرقم الذي يرسله العميل. وبعد ذلك، يتم طباعة الرقم الذي تم استلامه في الترمينال الخاص بالخادم.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...