Rumah  >  Artikel  >  Java  >  Mengapa Pelayan Java Saya Gagal Menjawab Permintaan Pelanggan?

Mengapa Pelayan Java Saya Gagal Menjawab Permintaan Pelanggan?

DDD
DDDasal
2024-11-10 05:41:02544semak imbas

Why Does My Java Server Fail to Respond to Client Requests?

Pelayan Gagal Membalas Pelanggan dalam Komunikasi Soket Java

Di Java, apabila cuba mewujudkan komunikasi soket antara pelanggan dan pelayan, ia adalah mungkin menghadapi situasi di mana pelayan gagal bertindak balas kepada klien. Ini mungkin disebabkan oleh beberapa sebab, yang akan kami terokai dalam artikel ini.

Komunikasi Soket Pelayan-Pelanggan

Untuk memulakan komunikasi, pelayan biasanya mencipta ServerSocket dan mendengar sambungan masuk pada port tertentu. Setelah pelanggan menyambung, pelayan mencipta objek Soket untuk mewujudkan sambungan. Pelanggan juga mencipta objek Socket untuk mewujudkan sambungan dengan pelayan.

Kod Pelayan

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket ss = null;
        Socket s = null;
        try {
            // Create a server socket and listen on port 34000
            ss = new ServerSocket(34000);

            // Accept an incoming connection from a client
            s = ss.accept();

            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(s.getOutputStream());

            // Continuously read messages from the client
            while (true) {
                String string = in.readLine();
                if (string != null) {
                    System.out.println("br: " + string);

                    // Respond to the "end" message from the client
                    if (string.equals("end")) {
                        out.write("to end");
                        out.flush();
                        out.close();
                        System.out.println("end");
                        // break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close the socket connections
            s.close();
            ss.close();
        }
    }
}

Kod Pelanggan

public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        try {
            // Create a client socket and connect to the server on port 34000
            socket = new Socket("localhost", 34000);
            
            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

            // Send a message to the server
            String string = "end";
            out.write(string);
            out.flush();

            // Listen for the server's response
            while (true) {
                String string2 = in.readLine();
                if (string2.equals("to end")) {
                    System.out.println("yes sir");
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Close the socket connection
            socket.close();
        }
    }
}

Menyelesaikan masalah

Jika pelayan gagal untuk membalas pelanggan, terdapat beberapa sebab yang mungkin:

  • Watak Baris Baharu Hilang: Apabila menulis mesej menggunakan OutputStreamWriter, anda perlu menambahkan aksara baris baharu ("rn" ) hingga akhir mesej. Ini menandakan penghujung mesej ke hujung jauh. Dalam kod yang disediakan, mesej "tamat" dihantar tanpa aksara baris baharu, yang boleh menyebabkan pelayan mengabaikannya.

Penyelesaian: Tambahkan "rn" pada akhir mesej dihantar dari kedua-dua pelanggan dan pelayan.

string = "end\r\n";
out.write(string);
out.flush();
out.write("to end\r\n");
out.flush();
  • Rangkaian Berubah-ubah Sambungan: Jika kedua-dua klien dan pelayan berjalan pada komputer yang berbeza, sambungan rangkaian antara mereka mungkin tidak stabil atau terganggu, menyebabkan komunikasi gagal.

Penyelesaian: Sahkan sambungan rangkaian dan semak kemungkinan tembok api atau tetapan penghala yang mungkin menyekat masuk atau keluar sambungan.

  • Konfigurasi Port Salah: Pastikan kedua-dua klien dan pelayan menggunakan nombor port yang sama untuk komunikasi. Dalam kod yang disediakan, pelayan sedang mendengar pada port 34000, jadi pelanggan juga mesti menyambung ke port tersebut.

Penyelesaian: Laraskan nombor port dalam kedua-dua klien dan pelayan kod jika perlu.

Atas ialah kandungan terperinci Mengapa Pelayan Java Saya Gagal Menjawab Permintaan Pelanggan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn