0

私は数日前に大学でJavaを学び始めました(主題は「サーバープログラミング」です)。クライアントとサーバーとして機能する2つのコードを書き始めたので、クライアントは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());
    }

(両方のコードはmain関数内にあります)また、サーバーコードのSystem.out.println(...)はサーバーにのみ表示され、クライアントにも同じように表示されます。アプリの進行状況を確認できるようにするだけです:)

あなたが私を助けてくれることを願っています。エラーがあることは知っていますが(まあ... 1ハハ以上)、どこにあるのかわかりません。2つの別々のプロジェクト/アプリケーションがあるということは、行を共有する2つのコードを意味し、いくつかの機能などを混同しているに違いありません。先生は一週間かそこら私を助けることができなくなります。待つことはできますが、ご存知のように、これが達成されたと感じるためだけに機能することを本当に望んでいます。

私は動作するコードを求めているのではなく、クラスで行うのと同じように、自分でコードをすべて修正できるように少し指示を求めています。

さよなら!

4

1 に答える 1

2

サーバー->クライアント通信用の新しいソケットを作成するのはなぜですか?

accept()呼び出しによって返されたソケットを使用してください!

于 2013-02-08T18:33:20.450 に答える