martonbarbosa
22-06-2011, 16:27:07
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.
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 :
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.
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
//ejemplo, lo ponemos en un label
label1.caption := obtenerUsuarioRed;
end;
alguna idea?
Desde ya muchisimas gracias!
M@rton
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.
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 :
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.
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
//ejemplo, lo ponemos en un label
label1.caption := obtenerUsuarioRed;
end;
alguna idea?
Desde ya muchisimas gracias!
M@rton