我在Java中有一个服务器类和一个客户端类。
事实是我正在localhost上进行测试,并且希望服务器响应HTTP的OPTIONS请求。
我不知道我在做什么错,我的客户端服务器收到了请求,但是没有返回我想要的,我也不知道我在做什么错。
我同时在这里离开客户端类和服务器,以查看是否有人对此问题有所了解。
客户端TCP
public class clientetcp {
public static void main(String argv[]) throws IOException {
/*
* Leemos los argumentos del programa para saber a qué
* servidor hay que conectarse.
*/
if (argv.length == 0) {
System.err.println("java clientetcp servidor");
System.exit(1);
}
Socket socket = null;
InetAddress address;
byte[] mensaje_bytes = new byte[256];
String mensaje = "";
try {
/*
* Establecemos una conexión con el servidor en el puerto 6001 y
* enviamos lo que el usuario escribe por teclado. Acabamos con la
* palabra end.
*/
address = InetAddress.getByName(argv[0]);
socket = new Socket(address, 6001);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
do {
out.writeUTF("GET /index.html HTTP/1.0");
out.writeUTF(""); // blank line separating header & body
out.flush();
String line;
line = in.readUTF();
System.out.println(line);
} while (!mensaje.startsWith("end"));
} catch (Exception e) {
System.err.println(e.getMessage());
System.exit(1);
} finally {
if (socket != null) {
System.out.println("Cerrando socket cliente ...");
socket.close();
}
}
}
}
服务器TCP
public class servidortcp {
public static void main(String argv[]) throws IOException {
ServerSocket socket = null;
String mensaje;
PrintWriter salida = null;
String salidaOstias;
String pedro;
try {
/*
* Creamos un socket de tipo servidor que escucha en el puerto
* TCP 6001 y espera conexiones de los clientes.
* Este programa recibe lo que viene del socket y lo muestra
* por pantalla.
*/
socket = new ServerSocket(6001);
Socket socket_cli = socket.accept();
DataInputStream in = new DataInputStream(socket_cli.getInputStream());
DataOutputStream out = new DataOutputStream(socket_cli.getOutputStream());
do {
mensaje = in.readUTF();
System.out.println(mensaje);
out.writeUTF("CONTESTO A LO QUE ME HAS DICHO");
} while (1 > 0);
} catch (Exception e) {
if (socket != null) {
System.out.println("Cerrando socket servidor ...");
socket.close();
}
System.err.println(e.getMessage());
System.exit(1);
}
}
}
我没有调试您的代码,但是我认为问题出在下面。
在服务器端,您应该为每个接受的连接启动并启动一个单独的线程。但是您没有这样做。
并且您的服务器处理主线程中的所有请求。
并且在这种情况下,直到它处理了循环的一个迭代(请求),它才会转到另一个迭代,因此不会处理另一个请求。