gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:17:18 27 4
gpt4 key购买 nike

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

这是我的代码。我使用了老师教的一些类(class),例如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(...) 仅在服务器中显示,对于客户端也是如此。我这样做只是为了看到应用程序的进度:)

希望你能帮助我。我知道有一个错误(嗯...超过 1 个哈哈),但我不确定在哪里,有 2 个单独的项目/应用程序意味着 2 个共享行的代码,我一定是混淆了一些功能或其他什么,并且老师将在一周左右的时间里无法帮助我。我可以等待,但我真的希望这一切能够发挥作用,只是为了感到有成就感,正如你可能理解的那样。

我不是要求一个工作代码,而是一些指示,这样我就可以自己修复代码,就像我在类里面所做的那样。

再见!

最佳答案

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

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

关于Java 客户端-服务器通信问题(Java 的第三天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com