border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

Cuenta Bancaria en EEUU
  #1 (permalink)  
Antiguo 03-12-2004, 23:22:10
Avatar de chlsaul
Usuario VIP del Foro
 
Registrado: nov 2003
Ubicación: Trujillo
Posts: 510
chlsaul Valoración +2
Contactar con chlsaul a través de MSN Contactar con chlsaul a través de Yahoo
Predeterminado Enviar datos a clientes

Hola denuevo...

Bueno logre conectar la aplicacion cliente a la aplicacion Servidor, envio datos, uso el split() yo todo OK, pero aun no logro hacer ke el servidor envie datos a los clientes simultaneamente, osea si conecto al servidor un solo cliente todo bien envia y recibe los datos, pero si conecto otro cliente me sale error "Protocolo o estadod e conexion erroneo para la peticion"...

BUeno no me kedo claro eso y kiciera saber es, como podria enviar del servidor datos tanto a todos los clientes y a uno o mas clientes especificos y obviamente ke reciba datos de mas de un cliente...


Grax..
Responder Con Cita
  #2 (permalink)  
Antiguo 04-12-2004, 07:10:42
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Si ya se han conectado los clientes tal y como te comenté en el post anterior, ahora solamente tienes que recorrer la colección de sockets para enviar datos a los clientes.

Código:
'El canal '0' no lo usamos pues es el que escucha en
'la parte servidora y gestiona el tráfico de peticiones.
for i = 1 to misocket.count-1
    'verificamos que el canal tiene conexión
    if misocket.state = sckConected then 
        misocket(i).senddata "Te envio datos ddel server" : doevents
    end if 
next i
Creo que además sería oportuno (no sé exactamente el objetivo de las conexiones) que establezcas un protocolo de comunicación tal y como está establecido por ejemplo en un FTP, de forma que tanto el servidor como los clientes, conozcan que pretende el uno del otro.

Por ponerte un ejemplo, cuando el servidor recibe una petición de conexión, por ese mismo canal y en ese mismo momento le envía al cliente recien conectado.

Código:
misocket(actIndex).senddata "[USERNAME]" : doevents
a lo que el cliente envía -con el mismo método-

Código:
clisocket.senddata "[USERNAME];chsaul":doevents

el cliente puede enviar un comando para que el servidor ejecute alguna tarea

Código:
clisocket.senddata "[EXEC];miapp.exe <parámetros>":doevents

con lo que el servidor, al recibir este comando, ejecutará esa aplicación



No sé si me entiendes...
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 04-12-2004, 13:59:33
Avatar de chlsaul
Usuario VIP del Foro
 
Registrado: nov 2003
Ubicación: Trujillo
Posts: 510
chlsaul Valoración +2
Contactar con chlsaul a través de MSN Contactar con chlsaul a través de Yahoo
Predeterminado

Hola denuevo Maestro.
Estoy aplicando poco a poco el codigo ke me muestra en su ejemplo y me salta un error exactamente en:

if misocket.state = sckConected then

"Variable no definida"

sckConected es una Variable ???
donde debe ser definida y de ke tipo...
Responder Con Cita
  #4 (permalink)  
Antiguo 04-12-2004, 14:09:59
Avatar de chlsaul
Usuario VIP del Foro
 
Registrado: nov 2003
Ubicación: Trujillo
Posts: 510
chlsaul Valoración +2
Contactar con chlsaul a través de MSN Contactar con chlsaul a través de Yahoo
Predeterminado

BUeno ya di con eso, y es que solo le faltaba una "n"...

Pero ahi voy denuevo...

Lo que aun no entiendo es como hacer cuando el cliente se conecta, asignar a la coleccion del socket una posision para despues recorrer la coleccion y enviar los datos...
Responder Con Cita
  #5 (permalink)  
Antiguo 04-12-2004, 14:46:30
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Lo que preguntas está reflejado en la primera respuesta que te envíe.

Tu tienes un Socket(0) que es el que se mantiene a la escucha en el servidor y existe un evento REQUEST que le inica que un cliente desea establecer conexión. El cliente te envía un idRequest unívoco y si ceptas la conexión, tienes que cargar con LOAD un nuevo canal de datos que controlas con ActIndex.

En el código que te posteé, existe una técnica que es -antes de cargar un nuevo canal- verificar si existe uno disponible (Cabe la posibilidad que algún cliente se haya desconectado y se debe aprovechar).

Revisa el código y comprobarás todo lo que trato de explicarte, y sobre todo ten constancia y paciencia pues las conexiones y transferencia de datos es de lo más corresoso hasta lograr su correcto funcionamiento.

No olvides que será necesario que establezcas un protocolo de entendimiento, pues de lo contrario la aplicación no sabe a que atenerse y puede perder hilos.


Otra cosa, procura postear en la misma pregunta pues si no lo haces así provocas que otros usuario que pueden responderte, se pierdan en un contexto que proviene de otras batallas que desconocen.


Espero que te resulte útil


PD: sckConnected es una constante del dominio de los Sockets y a veces escribiendo 'al vuelo' a uno se la olvidan algunos caracteres.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #6 (permalink)  
Antiguo 04-12-2004, 15:11:20
Avatar de chlsaul
Usuario VIP del Foro
 
Registrado: nov 2003
Ubicación: Trujillo
Posts: 510
chlsaul Valoración +2
Contactar con chlsaul a través de MSN Contactar con chlsaul a través de Yahoo
Predeterminado

Bien Maestro...
Ahora cuando el server acepta la conexion con Request ¿como asigana la posision? por ejemplo a sckServer(actIndex)
Que biene a ser actindex ?? una posicion en la coneccion ??
Lo que entiendo es (y creo que estoy mal) que la coleccion es como por ejemplo una array que va posisionando las conexiones de los clientes conforme se van conectando si es asi el socket asigna por si solo cada coneccion ? o tengo ke hacerlo con codigo ?? en ese caso como lo haria...?para despues tomar esas posisiones y enviar datos recorriendo la coleccion

Otra cosita, a que se refiere cuando dice "protocolo de entendimiento" a la IP del Server o de ambos Servidor y Cliente, como puedo defiir el protocolo de entendimiento ??
Responder Con Cita
  #7 (permalink)  
Antiguo 04-12-2004, 16:51:01
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Vamos a ver, quizas yo me estoy explicando mal y te estoy haciendo un pequeño enredo.

En el request esre tú que mediante código asignas un nuevo canal con actIndex LOAD MiSocket(actIndex) (Tal y como hemos visto hasta ahora). A partir de este momento todo lo que 'este' cliente te envíe y lo que el servidor necesite enviarle, se hará por ese canal (actIndex), de hecho el evento dataarrival te proporciona el INDEX que es precisamente el canal por el que un determinado cliente -y sólo uno- está conectado.

vamos a ver si me explico, según te vayan llegando peticiones de conexión se irá construyendo la siguiente imágen.


Socket(0) Es el servidor y el canal por el que escucha las peticiones

Socket(1) Canal del primer cliente que se conecta
Socket(2) Canal del segundo cliente que se conecta
Socket(3) Canal del tercer cliente que se conecta

Código:
misocket(2).senddata "<datos>"  Se lo estamos enviando al cliente 2

for i = 1 to 3
    misocket(i).senddata "<datos>"    se lo enviamos a todos los clientes
next i

Si el cliente (2) se desconecta lo pones en la pila de desconectados de forma que si alguien pide una nueva conexión, en vez de crear un canal 4, aprovechas el canal 2.


En referencia al protocolo de entendimiento quiero decir que es bueno para controlar el envío-recepción de dattos, que exista un diálog entre los dos extremos. Así cuando el servidor acepta una nueva conexión lo primero que debe hacer es algo parecido a

misocket(actindex).senddata "[QUIENERES]" :doevents

el cliente recibe y en DataArrival tiene algo parecido a esto

Código:
dim strData as string
dim spa as variant
clientSocket.Getdata StrData
spa= split(stradata, ";")
select case ucase(cstr(spa(0)))
    case "[QUIENERES]"
        clientSocket.senddata "[QUIENERES];Soy chsaul"
    case "[EJECUTA]"
        ....<más código>
    case "[DESCONECTA]"
        clientSocket.senddata "[DESCONECTA];Me estoy desconectando"
    case ...
    case ...
end select

Es decir, establecer un lenguaje de entendimiento para saber que pretende el cliente del servidor y a su vez que pretende el servidor de cada uno de los clientes conectados.

Me parecería una buena idea que uses un FTP y te conectes a un servidor de internet, verás como se pasan entre ellos códigos de la clase 250; 350; 251; para declarar sus intenciones.


No sé si ahora me he explicado algo mejor.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #8 (permalink)  
Antiguo 07-12-2004, 14:10:49
Avatar de chlsaul
Usuario VIP del Foro
 
Registrado: nov 2003
Ubicación: Trujillo
Posts: 510
chlsaul Valoración +2
Contactar con chlsaul a través de MSN Contactar con chlsaul a través de Yahoo
Predeterminado

Hola denuevo Maestro Acalanto.
Bien ya voy comprendiendo eso de la conexion y voy bien... pero...
Tengo este problema:
Envio (Tanto del Servidor al Cliente, como Cliente al servidor) un dato, ejemplo: "Solicito conexion", el cual este mismo mensaje debe ser mostrado en la aplicacion ke lo reciba pero al mostrarlo en un textbox me muestra algo como "????????on" y no lo ke deberia mostrarme...
cual es el problema en esto ???
Responder Con Cita
  #9 (permalink)  
Antiguo 07-12-2004, 14:35:31
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.271
acalanto ha deshabilitado la reputación
Predeterminado

Bueno, dicho así no oentiendo lo de ?????. Si envías con SendData y recibes en el evento DataArrival del socket y recoges el dato con getData no existe razón aparente para que te aparezca ???.

Algo estás haciendo mal, pero no puedo saber que puede ser.

Un consejo: Tanto en el servidor como en los clientes genera un formulario con un RichTextBox o un Textbox Multiline y según recoges los datos los vas mostrando como si de un editor de texto se tratase. Así podrás verificar comodamente el tráfico de la red, detectando cómodamente los errores que se pudieran producir.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Ayuda al enviar datos por email lesthad ASP.NET 0 18-02-2008 19:43:08
Clientes Deudores Eber Lenguaje SQL 4 28-07-2007 19:42:26
clientes de mysql? djagu_26 MySQL 0 26-12-2006 16:12:17
enviar datos por IR pocket pc lisergio2 Visual Basic 3.00 Embedded 1 10-12-2006 18:55:26
Enviar datos a una pagina Web HurryCrack Visual Basic 6.00 4 17-09-2004 01:00:00


La franja horaria es GMT. Ahora son las 03:55:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right