CGI - Blocking

 
Vista:

Blocking

Publicado por Arnedis (1 intervención) el 11/12/2009 18:26:49
Hola soy Cristian y la verdad que soy bastante nuevo en esto... mi problemilla es que cuando intento leer el dato que me responde un servidor hacho en visual que esta alojado en una maquina con windows, mi explorador web Mozilla se queda esperando al localhost por siempre... lo raro es que cuando deshabilito o cierro el servidor en windows, en linux en el explorador me muestra el dato! lo que yo quiero es que me lo muestre sin tener que cerrar el server en windows... Gracias de antemano

#!/usr/bin/perl -w

# client2way.pl - a client that writes to

# and reads from a server

use strict;

use IO::Socket;
$|++;
print "content-type: text/html \n\n";

my $host = shift || '192.168.2.114';

my $port = shift || 12000;

my $sock = new IO::Socket::INET(

Blocking=>1,

PeerAddr => $host,

PeerPort => $port,

Proto => 'tcp');
$sock->autoflush(1);

# send message to server


print $sock "Consulta";

print scalar <$sock>;

close $sock;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Comunicación con servidor en Perl

Publicado por Alejandro (140 intervenciones) el 25/08/2023 16:21:31
Es posible que estés experimentando un problema de bloqueo o espera infinita en tu script CGI. El hecho de que funcione en Linux pero no en Windows puede indicar diferencias en cómo los sistemas operativos manejan las comunicaciones y los bloqueos.

Para abordar este problema, aquí hay algunas sugerencias:

1. Manejo de errores: Agrega manejo de errores a tu script CGI para capturar cualquier problema que pueda estar ocurriendo durante la comunicación con el servidor en Windows. Esto podría ayudarte a identificar el punto exacto en el que se está produciendo el bloqueo.

2. Depuración: Agrega declaraciones de depuración en tu script para imprimir información a medida que avanza. Esto te permitirá rastrear en qué punto el script se está deteniendo o bloqueando.

3. Timeouts: Establece un tiempo de espera (timeout) para las operaciones de socket. Si no se recibe una respuesta del servidor dentro de un tiempo determinado, puedes manejarlo adecuadamente en tu script en lugar de quedar bloqueado indefinidamente.

Aquí tienes una versión modificada de tu script con algunos comentarios y cambios para implementar las sugerencias anteriores:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl -w
 
use strict;
use IO::Socket;
 
print "content-type: text/html\n\n";
 
my $host = shift || '192.168.2.114';
my $port = shift || 12000;
 
# Intenta crear el socket
my $sock = new IO::Socket::INET(
    Blocking => 1,
    PeerAddr => $host,
    PeerPort => $port,
    Proto    => 'tcp',
    Timeout  => 10  # Establece un timeout de 10 segundos
);
 
if (!$sock) {
    print "Error al conectar al servidor: $!\n";
    exit;
}
 
$sock->autoflush(1);
 
# Envía el mensaje al servidor
print $sock "Consulta\n";
 
# Lee la respuesta del servidor
my $response = <$sock>;
if (!defined $response) {
    print "No se recibió respuesta del servidor.\n";
} else {
    print "Respuesta del servidor: $response\n";
}
 
close $sock;

Asegúrate de revisar los resultados y los mensajes de error que el script proporciona para entender mejor lo que está sucediendo y dónde podría estar ocurriendo el problema. Si sigues experimentando bloqueos o problemas, considera consultar recursos adicionales sobre el uso de sockets en Perl y cómo depurar problemas de comunicación entre sistemas operativos diferentes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar