Ver Mensaje Individual
  #1  
Antiguo 22-06-2011
martonbarbosa martonbarbosa is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 15
Reputación: 0
martonbarbosa Va por buen camino
obtener datos mediante ServerSocket

Hola a todos... la verdad estuve leyendo varios codigos sobre delphi en este foro, y a demas de ayudarme bastante con mi proyecto ESTA BUENISIMO!

Acudo a ustedes, porque tengo un problemita que me gustaria resolver.

Estoy haciendo un chat privado que consiste en un Servidor que admite varias conexiones y su cliente respectivo...
El chat funciona de maravilla, el servidor admite todas las conecciones que yo desee y todo. pero me gustaria que mi servidor reciba a demas de la IP del cliente reciba otros datos.

Detallo evento donde el servidor agrega todas las conexiones a un listBox.

Código Delphi [-]
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
 x : integer;
begin
TrayIcon1.Tip := 'Servidor de : ' + obtenerUsuarioRed + #13 + #10 + 'Estado: Conectado';
Label1.Caption:= 'Estado Conexion: Conectado'; // en un label, muestra estado de conexion
 with listbox1.Items do
  begin
   Clear; //Primero limpia el listbox, para que cuando un usuario se desconecte se borre.
   for X  := 0 to serversocket1.Socket.ActiveConnections -1 do
    begin
     Add(ServerSocket1.Socket.Connections[x].RemoteAddress); // agrega conexiones activas
    end
  end;
sndplaysound('C:\Windows\Media\chimes.wav', SND_NODEFAULT Or SND_ASYNC); //ejecuta un sonido propio de windows (XP).
end;

Veremos, que a demas de todo, tiene un icono donde se agrega el estado, ejecuta un sonido cuando un cliente se conecta, y en el listbox me agrega la ip de la conexion, y como es multiconexion, me gustaria que ahi me agregue el nombre de la persona que se conecta, yo tengo una funcion que encontre por ahi que obtiene el NOMBRE de usuario de la pc. y me gustaria que en ese listbox aparesca dicho nombre de usuario.

Se les ocurre alguna idea de como mediante los sockets mande diche informacion?

Yo probe asi:
Cuando el cliente se conecta, que mande un mensaje con el comando :
Código Delphi [-]
ClientSocket1.Socket.SendText('texto'); //'texto' iria funcion de obtener usuario...

Pero al conectarce otros usuarios, el nombre de usuario no me lo agrega al listbox, sino al memo, que es donde recibo los mensajes...

Ahora, si solo se conecta uno, si el listbox recibe el nombre de usuario...

De paso, les adjunto la funcion para obtener el nombre de usuario de windows por si alguien lo quiere.

Código Delphi [-]
function obtenerUsuarioRed : Ansistring;
var
  dwI : DWord;
begin
  dwI := MAX_PATH;
  SetLength (Result, dwI + 1);
  if WNetGetUser (Nil, PChar (Result), dwI) = NO_ERROR then
    SetLength (Result, StrLen (PChar (Result)))
  else
    SetLength (Result, 0)
end;

la llamamos asi:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
//ejemplo, lo ponemos en un label
label1.caption := obtenerUsuarioRed;
end;

alguna idea?


Desde ya muchisimas gracias!

M@rton

Última edición por martonbarbosa fecha: 22-06-2011 a las 16:38:19.
Responder Con Cita