cliente Python servidor de servidor Java recibe nula

anochecer:

Como el nombre sugiere que el cliente envía al servidor nula. no puedo entender por qué

cliente Python

import socket

HOST = "localhost"
PORT = 5000

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))

dict = {
    0: "doug",
    1: "korg",
    2: "stefan",

}
for x in range(0, 3):
    if x == 3:
        sock.sendall("Bye\n")
        print(sock.recv(1024))
    sock.sendall(b"{}\n".format(dict.get(x)))
    print(dict.get(x))
    print(sock.recv(1024))

servidor de Java:

    public void run() {
        String fromClient;
        String toClient;
        try {
            ServerSocket server = new ServerSocket(5000);
            System.out.println("wait for connection on port 5000");

            boolean run = true;
            Socket client = server.accept();

            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            PrintWriter out = new PrintWriter(client.getOutputStream(), true);


            while (run) {
                System.out.println("got connection on port 5000");
                fromClient = in.readLine();
                System.out.println("received: " + fromClient);


                if (fromClient.equals("Bye")) {
                    toClient = "Aight later man";
                    System.out.println("send eyB");
                    out.println(toClient);
                    client.close();
                    System.out.println("socket closed");
                    break;
                }
                out.println("cool next User Please");
            }
            System.exit(0);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

mientras que las 3 primeras cuerdas están siendo envío desde el cliente al servidor y el servidor responde de vuelta, cuando Byese envía el servidor recibe nula y lanza una NullPointerException.

mi código se basa en este post. La comunicación entre el cliente y el servidor java pitón

el existir problema en String como cadena de bytes forma.

salida del servidor:

wait for connection on port 5000
got connection on port 5000
received: doug
got connection on port 5000
received: korg
got connection on port 5000
received: stefan
got connection on port 5000
Exception in thread "Thread-0" java.lang.NullPointerException
    at Jserver.run(Jserver.java:28)
received: null

Process finished with exit code 0

salida del cliente:

doug
cool next User Please

korg
cool next User Please

stefan
cool next User Please
Ferrybig:

Su problema es causado en el código Python, que nunca envía el comando "bye".

El error en el código Python:

Sus bucles de código Python desde 0 (incluido) a 3 (exclusivo), ya que se excluye el 3, el código no entra en el bloque "adiós", y nunca envía esto. (X impresión para confirmar esto)

Coloque el "adiós" código después del bucle.

for x in range(0, 3):
    sock.sendall(b"{}\n".format(dict.get(x)))
    print(dict.get(x))
    print(sock.recv(1024))
sock.sendall("Bye\n")
print(sock.recv(1024))

El error en el código de Java

Sí, también hay un error en el código de Java, sobre todo que no se ocupa de los cierres de corriente adecuada.

Cuando el programa de Python es estar apagado al final del código, el programa Java recibirá una salida limpia, esta es una manera excepción de menos de cerrar el zócalo, y dará lugar a readLinedevolver un valor nulo.

Este nula provoca entonces la siguiente excepción:

Exception in thread "Thread-0" java.lang.NullPointerException

Desde viendo un nullvalor significa el socket está cerrado, también se puede enhebrar esta, ya sea como una respuesta adecuada "bye" o como una condición de error.

            if (fromClient == null || fromClient.equals("Bye")) {

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202658&siteId=1
Recomendado
Clasificación