Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2010
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Unhappy 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
Responder Con Cita
  #2  
Antiguo 21-04-2010
Avatar de eflosten
eflosten eflosten is offline
Miembro
 
Registrado: abr 2010
Posts: 24
Poder: 0
eflosten Va por buen camino
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.
Código Delphi [-]
...
   NombrePC:='';
   FormServidor.ClientSocket1.Active:=False;
   end;
end;

A ver si te sirve, si no tendras que esperar a que venga alguien con mas conocimientos en estos temas

Saludos
Responder Con Cita
  #3  
Antiguo 21-04-2010
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 21-04-2010
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Question

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?
Responder Con Cita
  #5  
Antiguo 21-04-2010
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Question 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
Responder Con Cita
  #6  
Antiguo 21-04-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
  for i :=0  to ServerSocket1.Socket.ActiveConnections-1 do
     ServerSocket1.Socket.Connections[i].SendText(Edit1.Text);
end;
.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 21-04-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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
Responder Con Cita
  #8  
Antiguo 23-04-2010
jlsc jlsc is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
jlsc Va por buen camino
Smile

He probado y funciona correctamente.

Muchas gracias

Un saludo
Responder Con Cita
Respuesta



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
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 19:05:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi