Java客户端-服务器通信问题(使用Java的第三天)

Java客户端-服务器通信问题(使用Java的第三天),java,sockets,client,serversocket,Java,Sockets,Client,Serversocket,几天前,我在大学开始学习Java(课程是“服务器编程”),我们开始编写两个代码,作为客户端和服务器,因此客户端向服务器发送一个包含3个数值的字符串,这必须应用一个数学公式(我不记得是什么公式,但这并不重要)然后将结果返回给客户机,客户机必须将结果打印在屏幕上或其他任何地方 这是我的密码。我使用了老师教的一些课程,比如Socket和ServerSocket,但是我知道代码中有一些错误,我找不到原因。在客户端与服务器联系并且服务器为其打开套接字后,它停止工作 客户端代码: int capit

几天前,我在大学开始学习Java(课程是“服务器编程”),我们开始编写两个代码,作为客户端和服务器,因此客户端向服务器发送一个包含3个数值的字符串,这必须应用一个数学公式(我不记得是什么公式,但这并不重要)然后将结果返回给客户机,客户机必须将结果打印在屏幕上或其他任何地方

这是我的密码。我使用了老师教的一些课程,比如Socket和ServerSocket,但是我知道代码中有一些错误,我找不到原因。在客户端与服务器联系并且服务器为其打开套接字后,它停止工作

客户端代码:

    int capital = 300000;
    int interes = 4;
    int plazos = 360;
    String IP_servidor = "127.0.0.1";
    int puerto_servidor = 8801;

    try{

        // Connect with server
        Socket servidor = new Socket (IP_servidor,puerto_servidor); // Se crea un socket para el servidor, con su IP para mandarle luego datos       
        //Server connected

        //Preparing data
        String datos = capital + ";" + interes + ";" + plazos;
        //Data prepared


        //Sending data
        PrintWriter conexion = new PrintWriter(servidor.getOutputStream(),true);   //Object "conexion" will be the one to which we'll write data the server will receive
        conexion.println(datos);
        //Data sent

        // Server processes data and returns it

        //Receiving data
        Socket recepcion = new Socket (IP_servidor,puerto_servidor); 
        BufferedReader lector = new BufferedReader (new InputStreamReader (recepcion.getInputStream()));
        String operacion = new String("");
        operacion = lector.readLine();
        //Data received back

        // End

    }

     catch (IOException Err){
        System.out.println("Error");
        System.out.println(Err.getMessage());
    }
以及服务器的代码:

    int puerto_servidor = 8801;

    try{

        // Server starts and connects with client
        ServerSocket miServidor = new ServerSocket(puerto_servidor);
        System.out.println("Socket created");
        Socket cliente = miServidor.accept();
        System.out.println("Petition from " + cliente.getInetAddress() + " received...");
        // Server started and client connected


        //Receiving data
        Socket cliente2 = new Socket (cliente.getInetAddress(),puerto_servidor); // Creating socket for client, so we can send data there after this
        BufferedReader lector = new BufferedReader (new InputStreamReader (cliente2.getInputStream()));
        String operacion = new String("");
        operacion = lector.readLine();        //Copy from the client to a string to decode afterwards
        System.out.println("Received string \"" + operacion + ".");
        //Data received


        //Preparing data
        String[] datos;
        datos = operacion.split(";"); //En 'datos' (0,1,2) se guardan separados los valores que se recibieron
        capital = Integer.parseInt(datos[0]);
        interes = Integer.parseInt(datos[1]);
        plazos = Integer.parseInt(datos[2]);
        System.out.println("String was cut to 3 pieces: \"" + capital + "\", \"" + interes + "\" y \"" + plazos + "\".");
        int resultado = capital*interes*plazos;
        //Data prepared


        // Se devuelve el resultado al cliente
        PrintWriter way_back = new PrintWriter(cliente.getOutputStream(),true);   
        way_back.println("Result is: " + resultado);
        System.out.println("Result was returned");
        // Se ha devuelto el resultado

        // End

    }

     catch (IOException Err){
        System.out.println("Error");
        System.out.println(Err.getMessage());
    }
(两个代码都在主功能内) 另外,我知道服务器代码中的System.out.println(…)只显示在服务器中,客户端也是如此。我这样做只是为了查看应用程序的进度:)

我希望你能帮助我。我知道有一个错误(嗯…不止一个哈哈),但我不确定在哪里,有两个独立的项目/应用程序意味着两个代码共享行,嗯,我一定是混淆了一些功能或其他什么,老师将无法帮助我一周左右。我可以等,但我真的希望这一切都能起作用,就像你可能理解的那样,我只是想让你觉得自己完成了

我不是要一个有效的代码,而是一点说明,这样我就可以自己修复代码,就像我在课堂上做的那样


再见

为什么要为服务器->客户端通信创建新的套接字


使用accept()调用返回的套接字

1+感谢您通读代码并回答一个没有隔离bug的问题。谢谢!实际上,这或多或少就是故障的原因。我刚刚摆脱了“客户2”,改用了“客户”,一切正常。我还必须更改客户端代码中的相同内容(我创建了另一个套接字“recepcion”,因此我将其替换为“servidor”套接字)。谢谢你,你帮了我很多。