Autor
|
Tema: Multi threads con winsock o multiconexion (Leído 7,659 veces)
|
LeandroA
|
hola hace tiempo vengo con este problema y no encuentro solucion. les explico masomenos, estoy haciendo una aplicacion cliente / servidor multiconexion con winsock, el problema es que cuando hago mas de una conexion (maximo 2) al sever deja de responder correctamente, por ejemplo un cliente se conecta entonces el server comienza a enviar una data, y en el evento sendcomplete envia otra data (esto un numero de veces) , bien con el primer cliente funciona, con el segundo(si no pongo un doevents, tambien) con el tercero hasta que no se desconecte uno de los dos primero no se cumple el evento sendcomplete y este bucle de envio se interrumpe. a mi parecer es un problema de threat, no se bien como lo haran los verdaderos servidores pero en fin con visual basic no encontre forma. (tambien probe con la clase CSocketMaster.cls y es lo mismo) En el ejemplo que voy a poner en el server no utilize el winsock.ocx interface sino que lo utilize como una clase objWinSock As MSWinsockLib.Winsock pero basicamente es lo mismo el problema es en ambos. multiconexion.zip en UpSourceCode.com.arpara provar ejecutan el server y despues un par de veces el cliente.exe y van a ver que la tercera ves no llegan los datos hasta cerrar uno de los dos primeros. bien espero alguien sepa como puedo solucionar este problema de threat Saludos
|
|
« Última modificación: 30 Abril 2008, 02:35 am por LeandroA »
|
En línea
|
|
|
|
SKL (orignal)
Desconectado
Mensajes: 259
UpLoadSourceCode
|
pero... probaste con el CSocketMaster Plus para multiconexiones???
yo lo use una vez con mas de 5 usuarios y me andubo perfecto, fijate qeu hay varias versiones. y tambien hay una funcion o una variable para maximo de conexiones, segun lo que lei pusiste maximo 2, entonces como se va a conectar un 3ro si no se puede???
sl2
|
|
|
En línea
|
|
|
|
LeandroA
|
Hola porve con CSocketMaster Plus pero no funciona tampoco, se pone insestable y explota vb.
no se trata de cuantos usuarios pueda conectar yo vasicamente el ejemplo que puse lo que hace es simular un server enviando Archivos a mas de un cliente a la ves, con un simple chat no abria problemas ya que al no ser grande el trafico se la bancaria bien. pero lo que intento solucionar es por ejemplo un server enviando un archivo a cinco clientes a la ves.
Tambien prove poner el codigo que figura en la clase1 dentro de un EXE ActiveX para poder simular el Multi threads y solo pasarle a este el requestID, pero no funciona porque el EXE ActiveX posee otra instancia diferente al de mi aplicacion(server) entonces el socket no lo hacepta y da un error del objeto.
lo unico que se me ocurre y no me combense para nada, es intentar repartir los paquetes el finalizar el envio (sendcomplete) por cada conexion y ademas no se si igual funcionaria
ejemplo
sever envia primera parte del paquete a cliente1 continua server enviando primera parte al cliente numero dos, asi con el tres y el cuatro etc.
finalizado este ciclo
sever envia Segunda parte del paquete a cliente1 continua server enviando Segunda parte al cliente numero dos, asi con el tres y el cuatro etc.
pero bueno no seria nada facil de programarlo y ademas dejaria de ser Multi threads
ya me esta acobardando Saludos
|
|
|
En línea
|
|
|
|
jackl007
Desconectado
Mensajes: 1.403
[UserRPL]
|
Y has probado crear una matriz en el cliente y en el server, de modo que cada server[a] este conectado a cada cliente[a]; y asi seria como usar varios winsocks, pero teniendo uno solo.
|
|
|
En línea
|
|
|
|
LeandroA
|
Y has probado crear una matriz en el cliente y en el server, de modo que cada server[a] este conectado a cada cliente[a]; y asi seria como usar varios winsocks, pero teniendo uno solo.
hola, si practicamente en el ejemplo que puse, es asi como lo estoy trabando, en verdad ya prove todas las formas que se me podian cruzar por la cabesa pero no encuentro la forma de enviar un archivo a mas de dos clientes a la ves. (utilizando este metodo de enviar el siguiente paquete despues del primero con el mentodod sendcomplete) Saludos
|
|
|
En línea
|
|
|
|
LeandroA
|
bueno creo que esta solucionado no lo prove a grandes rasgos pero creo que va a ir bien, el problema es que ni el evento sendComplete ni el winsock.send crean un nuevo hilo, por lo tanto este pasa a puntero la ultima clase llamada asi que lo que hice fue llamar dentro del evento Sendcomplete un pulso de un timer para enviar el siguiente paquete, creo que es lo mas parecido a un multi threads que se puede hacer sin que casque el visual. bueno si a alguien le sirve el ejemplo o puede mejorarlo. multiconexion2.zip - Descargalo en UpSourceCode.com.arSaludos y muchas gracias
|
|
|
En línea
|
|
|
|
alexxandra
Desconectado
Mensajes: 1
|
hola me interesa el ejemplo que publicaste pero ya no esta disponible, podrias subirlo de nuevo, gracias
|
|
|
En línea
|
|
|
|
ssccaann43 ©
Desconectado
Mensajes: 792
¬¬
|
No revivas post viejos...! Si ves la firma de Leandro hay un link, entra allí y busca lo que necesitas!
|
|
|
En línea
|
- Miguel Núñez Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio... "I like ^TiFa^"
|
|
|
|
|