FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Muchas gracias por toda la información. Sobre sockets en Windows encontré esto: http://www.programacionenc.net/index.php?option=com_content&view=article&id=73:sockets-en-windows&catid=37rogramacion-cc&Itemid=55
Tengo algunas dudas sobre el ejemplo que pones de sockets: - Por lo que he leído accept espera a que se conecte un cliente pero, si son por ejemplo 2 clientes ¿como seria? - Si cliente y servidor están en la misma máquina ¿se usaría AF_UNIX? Eso es lo que entendí. - ¿Cómo sería para que fuesen a sincrónicos? |
#2
|
||||
|
||||
Cita:
Cita:
Para establecer al socket como no bloqueante se usa la función ioctlsocket También puedes usar un tipo bloqueante con un TimeOut con la función select Saludos. |
#3
|
||||
|
||||
Ok muchas gracias. Voy a leer y a probar y ya cuento como me fue.
|
#4
|
||||
|
||||
Ando bastante liado con todo esto y por ahora tengo este codigo aunque falta por dejarlo como quiero pero poco a poco:
Código PHP:
Código:
Esperando conexiones entrantes... Error al asociar puerto e ip al socket Conexion entrante desde: 127.0.0.1 Recibiendo Mensajes... Datos recibidos: El proceso con PID: 3748 ha funcionado durante 500 milisegundos. Código PHP:
¿Me pueden explicar porque me falla y que debo cambiar? Última edición por aguml fecha: 06-03-2017 a las 12:10:57. |
#5
|
||||
|
||||
Al final he conseguido que funcione pero quiero aprender a hacer bien las cosas y me gustaria que lo corrigiese alguien y me diga si hago algo mal y me pueda explicar como hacerlo correctamente.
Aquí está el código: Servidor: Código PHP:
Código PHP:
|
#6
|
||||
|
||||
Tu hilo contiene todo el servidor con lo que se repiten y ten en cuenta que no puedes tener dos servidores escuchando por el mismo puerto, el segundo sencillamente falla. El hilo debe crearse tras accept y el parámetro que pasas el el socket que devuelve accept. Cuando la comunicación con ese cliente termine, el hilo debe hacerlo también, con lo que tendrás que detectar un error de lectura recv < 0 y un posible comando de desconexión que diseñas tu mismo y que al cecibirlo desconectas el socket y terminas el hilo saliendo de su bucle.
WaitForMultipleObjects espera a que un hilo o todos terminen. Se utiliza para control. En este caso puedes establecer un número máximo de hilos de ejecución y mantener al servidor esperando antes de crear otra conexión en un nuevo hilo. Saludos. |
#7
|
||||
|
||||
La verdad es que lo único que creo entender es lo que me dices de accept el cual puse dentro del hilo porque pensé que era bloqueante pero si no es así es tan simple como ponerlo en el bucle for antes de llamar al hilo y pasar el valor retornado en vez del que paso ¿no?
Lo demás no entiendo lo que me quieres decir. Si pudieras corregirme el código y poner comentarios en las partes que modifiques explicando el porque lo entendería mejor. |
#8
|
||||
|
||||
Te muestro unos cambios en el servidor y en el cliente. En el server he eliminado el tratamiento de hilos para no enturbiar el código y muestro donde debería haber un bucle para mantenerse activo hasta orden contraria. También muestro como crea un hilo cada vez que acepta un cliente. Efectivamente accept es bloqueante, solo se libera al aceptar un cliente, es por ese motivo por el que no se coloca en el thread.
El server no necesita especificar ninguna dirección, por eso se usa INADDR_ANY. Tambien te muestro una forma más amable de inicializar la dirección tanto en el servidor como en el cliente. Me he tomado la libertad de cambiar algún nombre de variable y de eliminar la estructura parámetro de los hilos, puesto que pasando el Socket de comunicación basta. Código PHP:
Un segundo bucle mantendría la conversación con el hilo que el server nos cree hasta que la finalicemos con algún comando desde el teclado, por ejemplo y enviado al servidor. El server al recibir ese comando saldría del bucle del thread y finalizaría dicho hilo. Código PHP:
Espero que entiendas un poco mejor el tema. Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Reproductor de Musica Uso de WM_COPYDATA | Arieloi2 | API de Windows | 1 | 28-05-2010 03:19:19 |
duda sobre dll | romanuel | C++ Builder | 5 | 26-02-2008 20:58:52 |
Una duda sobre ADO | PTW | Conexión con bases de datos | 1 | 13-04-2004 23:33:14 |
Duda sobre BDE vs IBX | ESA | Firebird e Interbase | 3 | 04-03-2004 17:20:07 |
Duda sobre ADO | Omar Alejandro | Conexión con bases de datos | 7 | 31-05-2003 19:52:58 |
|