Tipos de conexión

27/05/2006 - 06:28 por Federico Ezequiel | Informe spam
Hola:

Hice un sistema con Visual Basic que tiene dos partes, un servidor y varios
clientes. El servidor se conecta con los clientes o viceversa mediante el
típico control winsock de VB. La interfaz tanto del servidor como del
cliente consiste básicamente en un pizarrón sobre el cual, quien maneja el
servidor escribe y al hacerlo, se envía mediante winsock una cadena que
dependiendo de como está constituida, escribe en los clientes: texto,
imágenes, etc. Los clientes también pueden escribir en el pizarrón. Siempre
utilicé este tipo de tecnología y nunca tuve problemas, pero ahora apareció
algo que no sé cómo solucionar. El servidor lo instalo en una máquina
cliente de una red local y esa red no reconoce ninguna IP que no forme parte
de la misma, de manera que no puedo usar la metodología que estuve usando
porque no logro salir de la red para conectarme con las otras máquinas.
Además, no puedo cambiar la configuración de la red ni tocar su servidor.
Lo que quería saber es si, considerando que tengo que manejarme en TIEMPO
REAL, que no cuento con la posibilidad de tocar la red ni su servidor y que
no puedo usar winsock ya que no sirve, ¿existe alguna solución a mi problema
usando ASP?
Muchas gracias.

Ezequiel

Preguntas similare

Leer las respuestas

#1 Dani Castillo
27/05/2006 - 09:42 | Informe spam
Sin tocar la red dificil :-S, lo habitual en estos casos es usar un servidor
de puente , el servidor (accesible desde internet y desde la red interna)
realiza conexiones puente entre los clientes (todos se conectan a el, el
server recoge las ordenes que enviaria tu pc conectado desde la red interna
y la reenviaria al cliente en la red externa o en la interna donde
estubiera) , no es complicado siempre que el servidor tenga una ip publica
en internet, o bien el router de salida a internet tenga ip fija y
redirigida la entrada por el puerto en cuestion al servidor

si no puedes tocar nada del server ni la red, lo tienes complicado, aunq no
imposible , pero vas a perder buena parte del tiempo real al que estas
acostumbrado, una opcion "posible" es en lugar de realizar las acciones por
'evento' (me llega una orden con un dibujo en la pizarra y lo reproduzco) es
actuar por 'polling' por encuesta, el cliente consulta cada x tiempo si hay
alguna orden nueva, el otro pc (el tuyo) va escribiendolas en algun lado
'comun', la encuesta de este tipo tiene dos problemas principales

1) no es tiempo real, dependes para la velocidad de la frecuencia con la que
muestrees

2) cargas la red: el cliente debe estar consultando si hay ordenes... aun
cuando no las haya, si la frecuencia es alta, el cliente saturara al
servidor (o si hay muchos clientes)


Supongo que el server lo tienes a mano para escribir asp :-) sino, dificill,
y que es accesible desde internet, la idea basica seria tener algunos asp,
un asp que reciba ordenes y las guarde en algun lado (fichero de texto, base
de datos, etc) y otro asp que consulta ese fichero o base de datos y una
vez leido lo 'limpia' para saber que esta cumplido (o bien otro asp de
borrado de ordenes pasadas)

tu escribirias en el fichero o base de datos

el cliente consultaria ese asp para saber si hay ordenes nuevas y las
ejecutaria, esa consulta puede ser bien por un webbrowser (y luego analizar
el contenido) bien por socket (protocolo http)

no es sencillo y los resultados te van a saber a poco, ya que la respuesta
es usualmente bastante lenta y a golpes (el cliente obtendra cada x segundos
una serie de ordenes y las hace todas seguidas)

suerte
dani
"Federico Ezequiel" escribió en el mensaje
news:
Hola:

Hice un sistema con Visual Basic que tiene dos partes, un servidor y
varios
clientes. El servidor se conecta con los clientes o viceversa mediante el
típico control winsock de VB. La interfaz tanto del servidor como del
cliente consiste básicamente en un pizarrón sobre el cual, quien maneja el
servidor escribe y al hacerlo, se envía mediante winsock una cadena que
dependiendo de como está constituida, escribe en los clientes: texto,
imágenes, etc. Los clientes también pueden escribir en el pizarrón.
Siempre
utilicé este tipo de tecnología y nunca tuve problemas, pero ahora
apareció
algo que no sé cómo solucionar. El servidor lo instalo en una máquina
cliente de una red local y esa red no reconoce ninguna IP que no forme
parte
de la misma, de manera que no puedo usar la metodología que estuve usando
porque no logro salir de la red para conectarme con las otras máquinas.
Además, no puedo cambiar la configuración de la red ni tocar su servidor.
Lo que quería saber es si, considerando que tengo que manejarme en TIEMPO
REAL, que no cuento con la posibilidad de tocar la red ni su servidor y
que
no puedo usar winsock ya que no sirve, ¿existe alguna solución a mi
problema
usando ASP?
Muchas gracias.

Ezequiel


Respuesta Responder a este mensaje
#2 Federico Ezequiel
27/05/2006 - 20:58 | Informe spam
Dani:

Muchas gracias por tu ayuda.
Con el panorama que me presentás, puedo hacer más precisa mi consulta, al
punto de encontrarme cerca de obtener una solución (espero...). El cliente
de la red tiene conexión a Internet, se puede navegar la web y esa conexión
es brindada por el servidor de la red.
Entiendo lo que decís sobre cambiar la lógica de "eventos" a "encuesta", de
hecho, hice una aplicación en VB que sube a una página mediante ftp un .txt
y los clientes descargan cada tanto ese .txt en el que está contenida la
información que indica lo que se debe hacer. El problema que encontré en
esto es que, por algún motivo que desconozco, cuando yo subo el .txt y luego
lo bajo, el programa que hace la descarga baja la versión anterior del .txt
y no la más actual. Esto puede ocurrir a veces solo por unos segundos y a
veces durante unos minutos, como si el servidor donde se aloja la página no
hiciera la actualización de manera inmediata. Pero entonces se me ocurre lo
siguiente, a ver que te parece: en primer lugar, no es necesario que todos
los clientes chequeen una web determinada constantemente, puedo poner una PC
intermediaria entre el servidor de la conexión (que es un cliente de la red
local) y los clientes. Entonces, sería esa PC la que se encargaría de
descargar cada tantos segundos el .txt (o la información en el formato que
esté, incluso ASP), si encuentra una novedad en el .txt, envía las nuevas
directivas a todos los clientes mediante el famoso winsock, ya que esta PC
no está en una red local ni tiene ninguno de los problemas mencionados. Este
sería un punto. El otro punto, considerando el problema de que no se
actualiza la información subida a la web de manera instantánea, se me
ocurrió resolverlo de la siguiente manera, dando de alta a un dominio (por
ejemplo midominio.com.ar) que esté volcado en esta misma PC que reenvía a
todos los clientes mediante winsock. De manera que cuando escribo la
información en el .txt por ejemplo, estoy escribiendo en esta PC que
instantáneamente manda la info a los clientes. (creo que incluso acá, podría
haber una forma de volver a la lógica de "eventos")
Como te dije, me estoy moviendo en un terreno que no conozco muy bien, crees
que mis ideas me ayudarían a resolver el problema y a seguir trabajando en
tiempo real o con retrasos no mayores a los 5 segundos.
Muchas gracias de nuevo.

Ezequiel


"Dani Castillo" escribió en el mensaje
news:
Sin tocar la red dificil :-S, lo habitual en estos casos es usar un


servidor
de puente , el servidor (accesible desde internet y desde la red interna)
realiza conexiones puente entre los clientes (todos se conectan a el, el
server recoge las ordenes que enviaria tu pc conectado desde la red


interna
y la reenviaria al cliente en la red externa o en la interna donde
estubiera) , no es complicado siempre que el servidor tenga una ip publica
en internet, o bien el router de salida a internet tenga ip fija y
redirigida la entrada por el puerto en cuestion al servidor

si no puedes tocar nada del server ni la red, lo tienes complicado, aunq


no
imposible , pero vas a perder buena parte del tiempo real al que estas
acostumbrado, una opcion "posible" es en lugar de realizar las acciones


por
'evento' (me llega una orden con un dibujo en la pizarra y lo reproduzco)


es
actuar por 'polling' por encuesta, el cliente consulta cada x tiempo si


hay
alguna orden nueva, el otro pc (el tuyo) va escribiendolas en algun lado
'comun', la encuesta de este tipo tiene dos problemas principales

1) no es tiempo real, dependes para la velocidad de la frecuencia con la


que
muestrees

2) cargas la red: el cliente debe estar consultando si hay ordenes... aun
cuando no las haya, si la frecuencia es alta, el cliente saturara al
servidor (o si hay muchos clientes)


Supongo que el server lo tienes a mano para escribir asp :-) sino,


dificill,
y que es accesible desde internet, la idea basica seria tener algunos asp,
un asp que reciba ordenes y las guarde en algun lado (fichero de texto,


base
de datos, etc) y otro asp que consulta ese fichero o base de datos y una
vez leido lo 'limpia' para saber que esta cumplido (o bien otro asp de
borrado de ordenes pasadas)

tu escribirias en el fichero o base de datos

el cliente consultaria ese asp para saber si hay ordenes nuevas y las
ejecutaria, esa consulta puede ser bien por un webbrowser (y luego


analizar
el contenido) bien por socket (protocolo http)

no es sencillo y los resultados te van a saber a poco, ya que la respuesta
es usualmente bastante lenta y a golpes (el cliente obtendra cada x


segundos
una serie de ordenes y las hace todas seguidas)

suerte
dani
"Federico Ezequiel" escribió en el mensaje
news:
> Hola:
>
> Hice un sistema con Visual Basic que tiene dos partes, un servidor y
> varios
> clientes. El servidor se conecta con los clientes o viceversa mediante


el
> típico control winsock de VB. La interfaz tanto del servidor como del
> cliente consiste básicamente en un pizarrón sobre el cual, quien maneja


el
> servidor escribe y al hacerlo, se envía mediante winsock una cadena que
> dependiendo de como está constituida, escribe en los clientes: texto,
> imágenes, etc. Los clientes también pueden escribir en el pizarrón.
> Siempre
> utilicé este tipo de tecnología y nunca tuve problemas, pero ahora
> apareció
> algo que no sé cómo solucionar. El servidor lo instalo en una máquina
> cliente de una red local y esa red no reconoce ninguna IP que no forme
> parte
> de la misma, de manera que no puedo usar la metodología que estuve


usando
> porque no logro salir de la red para conectarme con las otras máquinas.
> Además, no puedo cambiar la configuración de la red ni tocar su


servidor.
> Lo que quería saber es si, considerando que tengo que manejarme en


TIEMPO
> REAL, que no cuento con la posibilidad de tocar la red ni su servidor y
> que
> no puedo usar winsock ya que no sirve, ¿existe alguna solución a mi
> problema
> usando ASP?
> Muchas gracias.
>
> Ezequiel
>
>


Respuesta Responder a este mensaje
#3 Dani Castillo
27/05/2006 - 22:20 | Informe spam
nasss veamos por partes:

"Federico Ezequiel" escribió en el mensaje
news:%
Dani:

Muchas gracias por tu ayuda.


de nada :-)
Con el panorama que me presentás, puedo hacer más precisa mi consulta, al
punto de encontrarme cerca de obtener una solución (espero...). El cliente
de la red tiene conexión a Internet, se puede navegar la web y esa
conexión
es brindada por el servidor de la red.
Entiendo lo que decís sobre cambiar la lógica de "eventos" a "encuesta",
de
hecho, hice una aplicación en VB que sube a una página mediante ftp un
.txt
y los clientes descargan cada tanto ese .txt en el que está contenida la
información que indica lo que se debe hacer. El problema que encontré en
esto es que, por algún motivo que desconozco, cuando yo subo el .txt y
luego
lo bajo, el programa que hace la descarga baja la versión anterior del
.txt
y no la más actual.



Sip, existe lo que se llama cache en los servidores, el server "recuerda que
el archivo txt era el que tiene en memoria" y lo sirve tal cual

formas de solucionarlo:
1) modificando el server cosa que no queremos y no garantiza realmente
nada porque puede haber caches intermedias

2) pidiendo "otro archivo", evidentemente no podemos andar cambiando de
archivos pero quiza valga un viejo truco, el server admitira parametros al
pedir un http, o bien haces el txt directamente como un asp , o bien lo
pides con parametros
http://servidor/fichero.txt
quedaria como
http://servidor/fichero.txt?tiempo=xxxxx

donde xxxxx es un numero aleatorio (o una cuenta en milisegundos por ejemplo
variable cada vez)

el archivo "no hace nada" con el parametro, pero el server se ve obligado a
recalcularlo sobretodo si es un asp, asp tb tiene mecanismos para evitar la
cache propios, pero el paso de parametros aleatorios es garantia de q el
server se va a ver obligado a releer el archivo


Esto puede ocurrir a veces solo por unos segundos y a
veces durante unos minutos, como si el servidor donde se aloja la página
no
hiciera la actualización de manera inmediata. Pero entonces se me ocurre
lo
siguiente, a ver que te parece: en primer lugar, no es necesario que todos
los clientes chequeen una web determinada constantemente, puedo poner una
PC
intermediaria entre el servidor de la conexión (que es un cliente de la
red
local) y los clientes. Entonces, sería esa PC la que se encargaría de
descargar cada tantos segundos el .txt (o la información en el formato que
esté, incluso ASP), si encuentra una novedad en el .txt, envía las nuevas
directivas a todos los clientes mediante el famoso winsock,




es una muy buena opcion :-)


dani.-
Respuesta Responder a este mensaje
#4 Federico Ezequiel
27/05/2006 - 23:45 | Informe spam
Dani:

Muchas gracias de nuevo.
Me alegro de que, a pesar de desconocer bastante el tema, pueda mantener un
diálogo con alguien que evidentemente conoce mucho sobre la materia.
Te hago unas pocas preguntas:
Qué diferencia hay entre usar los parámetros que mencionás con ir numerando
con distintos nombres el .txt que se sube: datos1.txt, datos2.txt, etc? ¿No
obtendría el mismo resultado si pido simultáneamente la descarga primero de
datos1.txt, luego de datos2.txt, etc? Si la respuesta va en favor de pasar
esos parámetros, cómo se implementa eso?
Muchas gracias.

Ezequiel

"Dani Castillo" escribió en el mensaje
news:
nasss veamos por partes:

"Federico Ezequiel" escribió en el mensaje
news:%
> Dani:
>
> Muchas gracias por tu ayuda.
de nada :-)
> Con el panorama que me presentás, puedo hacer más precisa mi consulta,


al
> punto de encontrarme cerca de obtener una solución (espero...). El


cliente
> de la red tiene conexión a Internet, se puede navegar la web y esa
> conexión
> es brindada por el servidor de la red.
> Entiendo lo que decís sobre cambiar la lógica de "eventos" a "encuesta",
> de
> hecho, hice una aplicación en VB que sube a una página mediante ftp un
> .txt
> y los clientes descargan cada tanto ese .txt en el que está contenida la
> información que indica lo que se debe hacer. El problema que encontré en
> esto es que, por algún motivo que desconozco, cuando yo subo el .txt y
> luego
> lo bajo, el programa que hace la descarga baja la versión anterior del
> .txt
> y no la más actual.

Sip, existe lo que se llama cache en los servidores, el server "recuerda


que
el archivo txt era el que tiene en memoria" y lo sirve tal cual

formas de solucionarlo:
1) modificando el server cosa que no queremos y no garantiza realmente
nada porque puede haber caches intermedias

2) pidiendo "otro archivo", evidentemente no podemos andar cambiando de
archivos pero quiza valga un viejo truco, el server admitira parametros al
pedir un http, o bien haces el txt directamente como un asp , o bien lo
pides con parametros
http://servidor/fichero.txt
quedaria como
http://servidor/fichero.txt?tiempo=xxxxx

donde xxxxx es un numero aleatorio (o una cuenta en milisegundos por


ejemplo
variable cada vez)

el archivo "no hace nada" con el parametro, pero el server se ve obligado


a
recalcularlo sobretodo si es un asp, asp tb tiene mecanismos para evitar


la
cache propios, pero el paso de parametros aleatorios es garantia de q el
server se va a ver obligado a releer el archivo


> Esto puede ocurrir a veces solo por unos segundos y a
> veces durante unos minutos, como si el servidor donde se aloja la página
> no
> hiciera la actualización de manera inmediata. Pero entonces se me ocurre
> lo
> siguiente, a ver que te parece: en primer lugar, no es necesario que


todos
> los clientes chequeen una web determinada constantemente, puedo poner


una
> PC
> intermediaria entre el servidor de la conexión (que es un cliente de la
> red
> local) y los clientes. Entonces, sería esa PC la que se encargaría de
> descargar cada tantos segundos el .txt (o la información en el formato


que
> esté, incluso ASP), si encuentra una novedad en el .txt, envía las


nuevas
> directivas a todos los clientes mediante el famoso winsock,


es una muy buena opcion :-)


dani.-


Respuesta Responder a este mensaje
#5 Dani Castillo
29/05/2006 - 08:50 | Informe spam
Holas!
Muchas gracias de nuevo.
Me alegro de que, a pesar de desconocer bastante el tema, pueda mantener


un
diálogo con alguien que evidentemente conoce mucho sobre la materia.


No se mucho :-) simplemente estamos acostumbrados a entornos de programa
distintos

Te hago unas pocas preguntas:
Qué diferencia hay entre usar los parámetros que mencionás con ir


numerando
con distintos nombres el .txt que se sube: datos1.txt, datos2.txt, etc?


¿No
obtendría el mismo resultado si pido simultáneamente la descarga primero


de
datos1.txt, luego de datos2.txt, etc?



Si el esquema es "uno a uno" (con un pc intermedio que es el unico que lee
esos ficheros) de entrada no hay problema en hacerlo con datos1 datos2...
etc, lo unico dos pequeñas cosas a tener en cuenta, en primer lugar que el
cliente "encargado de leer" sepa porque fichero va (y hasta donde) y que de
alguna manera se eliminen esos ficheros (tipicamente el mismo lector lee y
borra el fichero para evitar llenar el server) , la primera parte de saber
que fichero leer parece "evidente" pero no es tan sencillo si se
desincronizan (ej. el servidor va por el fichero 30000, el cliente por lo
que sea se reinicia... le podria costar saber por donde seguir) . con un
fichero unico el tema es mas sencillo en ese aspecto (mas complejo quiza en
limpieza del fichero evitando que el servidor lo escriba al mismo tiempo)

Si la respuesta va en favor de pasar
esos parámetros, cómo se implementa eso?
Muchas gracias.
Ezequiel



Yo lo plantearia mas o menos asi:
1) un ASP que recibe una orden a "añadir" a la memoria de ordenes (por
parametro o form)
2) un ASP que devuelve todo el contenido de la memoria de ordenes y la borra

son asp's 'puros' de hecho si no hay mucha saturacion de ordenes puede
hacerse sin fichero ni nada, en application

el caso 1 es basicamente algo como
<%
application.lock
application("ordenes")=application("ordenes") & ";" & request("orden")
application.unlock
%>

Lo llamarias desde tu lanzador de ordenes con por ejemplo un webbrowser de
vb (oculto) o cualquier componente q te permita hacer llamadas http
(winsocks por ejemplo aunq el webbrowser es mas comodo para pruebas)

la url en este caso seria algo como
http://tuservidor/anyadeorden.asp?o...empo=xxxxx
con xxxx= numero aleatorio
las ordenes las va almacenando separadas por un punto y coma

el caso 2 es parecido
<%
application.lock
response.write application("ordenes")
application("ordenes")=""
application.unlock
%>


la url en este caso seria algo como
http://tuservidor/leeorden.asp?marcatiempo=xxxxx

y recuperando el contenido del webbrowser (innerhtml creo q era) te daria la
secuencia de ordenes que debe realizar

de nada :-D
dani

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida