FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con Sockets
Hola a todos,
Necesito hacer un programa mediante sockets, la idea es que desde un PC Servidor le envié mensajes a los demás PC Clientes al mismo tiempo. Lo tengo programado de tal manera que cada vez que un PC Cliente se conecte al servidor este almacene la IP del PC Cliente en un Treeview, y cuando se desconecte desaparezca del TreeView hasta aqui todo bien, mando un mensaje a cada PC cliente sin problemas pero cuando hago un bucle para enviar a todos los PC clientes no me funciona solo llegá a uno y luego me da error, me dice no se puede modificar el estado del socket cuando esta activo. Pero como hago cual es la idea? Yo lo tengo programado de la siguiente manera. procedure TFormMensaje.BitBtn1Click(Sender: TObject); var Mensaje, ClientText:String; NombrePC:String; k,j: integer; begin NombrePC:=''; for k:=0 to (FormServidor.TreeView1.Items.Count - 1) do begin ClientText:= FormServidor.TreeView1.items[k].Text; for j:=1 to 3 do NombrePC:= NombrePC + ClientText[j]; if (uppercase(NombrePC)='ESH') then {verifico que es un equipo al cual hay que mandarle según su nombre} begin FormServidor.ClientSocket1.Host:=ClientText; FormServidor.ClientSocket1.Port:=21; FormServidor.ClientSocket1.Active:=True; if FormServidor.ClientSocket1.Active then FormServidor.ClientSocket1.Socket.SendText(Memo1.Text + ' : '+ DateToStr(Date) + ' ' + TimetoStr(Time)); Memo1.Clear; FormMensaje.Close; end; NombrePC:=''; enD end; Ven el error o cual sería la manera correcta de hacerlo. Muchas gracias por su valiosa ayuda. Un saludo Jorge |
#2
|
||||
|
||||
Cuando pongas código trata de meterlo entre las etiquetas de código delphi, para que se marque como en el editor y todos lo veamos mejor.
No se mucho sobre sockets, pero por tu código y el error que cuentas, el problema es que intentas modificar el socket (en la segunda vuelta del bucle) sin haber cerrado el de la primera vuelta. Justo antes del final del for, desactiva el socket.
A ver si te sirve, si no tendras que esperar a que venga alguien con mas conocimientos en estos temas Saludos |
#3
|
|||
|
|||
Lo he probado pero no funciona, simplemente ya no manda nada a ninguno, lo he puesto después de sendText y me sale asynchronus socket error. La idea es enviar a uno cerrar el socket luego abrir el socket enviar a otro y luego cerrar asi sucesivamente pero no funciona.
|
#4
|
|||
|
|||
He detectado que en la parte:
................... FormServidor.ClientSocket1.Host:=ClientText; FormServidor.ClientSocket1.Port:=21; FormServidor.ClientSocket1.Active:=True; if FormServidor.ClientSocket1.Active then FormServidor.ClientSocket1.Socket.SendText(Memo1.Text + ' : '+ DateToStr(Date) + ' ' + TimetoStr(Time)); ....................................... FormServidor.ClientSocket1.Active:=True; no me lo pone a true en el watch. ¿alguna idea de porque? |
#5
|
|||
|
|||
Problema con Socket Client
Hola a todos,
Necesito hacer un programa mediante sockets, la idea es que desde un PC Servidor le envié mensajes a los demás PC Clientes al mismo tiempo. Lo tengo programado de tal manera que cada vez que un PC Cliente se conecte al servidor este almacene la IP del PC Cliente en un Treeview, y cuando se desconecte desaparezca del TreeView hasta aqui todo bien, mando un mensaje a cada PC cliente sin problemas pero cuando hago un bucle para enviar a todos los PC clientes no me funciona solo llegá a uno y luego me da error, me dice no se puede modificar el estado del socket cuando esta activo. Pero como hago cual es la idea? Yo lo tengo programado de la siguiente manera. procedure TFormMensaje.BitBtn1Click(Sender: TObject); var Mensaje, ClientText:String; NombrePC:String; k,j: integer; begin NombrePC:=''; for k:=0 to (FormServidor.TreeView1.Items.Count - 1) do begin ClientText:= FormServidor.TreeView1.items[k].Text; for j:=1 to 3 do NombrePC:= NombrePC + ClientText[j]; if (uppercase(NombrePC)='ESH') then {verifico que es un equipo al cual hay que mandarle según su nombre} begin FormServidor.ClientSocket1.Host:=ClientText; FormServidor.ClientSocket1.Port:=21; FormServidor.ClientSocket1.Active:=True; if FormServidor.ClientSocket1.Active then FormServidor.ClientSocket1.Socket.SendText(Memo1.Text + ' : '+ DateToStr(Date) + ' ' + TimetoStr(Time)); Memo1.Clear; FormMensaje.Close; end; NombrePC:=''; enD end; Ven el error o cual sería la manera correcta de hacerlo. Muchas gracias por su valiosa ayuda. Un saludo Jorge |
#6
|
||||
|
||||
Segun veo tu código lo que necesitas es usar el componente ServerSocket y no un ClientSocket.
Si lo que deseas es enviar un mensaje a todos los socket clientes desde el socket server pues yo lo haría de ésta forma: . Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#7
|
||||
|
||||
Amigo jlsc , no debes repetir las mismas preguntas(Hilos) en varios foros, por favor lee la guía de estilo para conocer las reglas del foro.
Aquí ya preguntaste lo mismo, por lo tanto voy a Mover y Unir ambos hilos.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#8
|
|||
|
|||
He probado y funciona correctamente.
Muchas gracias Un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Uso de sockets | vejerf | Internet | 3 | 15-11-2007 21:44:16 |
Problema con sockets | modulay | Internet | 2 | 10-02-2006 18:17:02 |
Problema con los sockets | Eklypsex | Internet | 0 | 05-07-2004 17:05:18 |
Orienteme con este problema de sockets | Ezecool | Varios | 0 | 26-01-2004 19:12:38 |
Problema con sockets!!! | DarkByte | Internet | 22 | 16-12-2003 19:54:32 |
|