Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error Delphi Sockets (https://www.clubdelphi.com/foros/showthread.php?t=60666)

cmm07 09-10-2008 16:49:50

Error Delphi Sockets
 
Hola, tengo un grave problema, estoy haciendo un chat con socket, conecto todos los socket al puerto 8092, y como ip localhost, todo bien conecta y todo perfecto;), pero (siempre hay un pero :D) al escribir un mensaje y al apretar en el boton Enviar (estoy enviando de Servidor a CLiente un mensaje) me marca el siguiente error:

:: Windows socket error: No se ha permitido una petición para enviar o recibir datos ya que el socket no está conectado y no se ha proporcionado ninguna dirección, al realizar el envío en un socket de datagramas por medio de una llamada sendto (10057), on API 'send' ::

pero cuando envio de Cliente a servidor lo hace perfecto, el problema está al enviar de servidor a cliente y se me desconecta de inmediato...

un poco de codigo:

Cliente Socket

propiedad OnRead

Código Delphi [-]
var
Listo,Comando: String;

begin
Comando:= Trim(Socket.ReceiveText);
Listo:= Copy(Comando, 0, 3);
Delete(Comando, 0, Pos('|', COmando));
if Listo = 'MSS' then begin
Memo1.Lines.Add(Comando);
Socket.SendText('LST|');
end;

if Listo = 'LST' then begin
Memo1.Lines.Add(MSGS);
end;

Servidor Socket:
propiedad OnCLientRead:
Código Delphi [-]
var
Listo,Comando: String;

begin
Comando:= Trim(Socket.ReceiveText);
Listo:= Copy(Comando, 0, 3);
Delete(Comando, 0, Pos('|', COmando));
if Listo = 'MSG' then begin
Memo1.Lines.Add(Comando);
Socket.SendText('LST|');
end;

if Listo = 'LST' then begin
Memo1.Lines.Add(MSGS);
end;

boton enviar:

Código Delphi [-]
if Button1.Enabled = False then begin
//CLiente
MSGS:= Edit2.Text;
CLiente.Socket.SendText('MSG|'+Edit1.Text+' : '+MSGS);
end else
begin
//Servidor
MSGS:= Edit2.Text;
Servidor.Socket.SendText('MSS|'+Edit1.Text+' : '+MSGS);
end;


gracias espero que me puedas ayudar...

vuelvo en la noxe gracias

54LU2

JuanchoArg 09-10-2008 23:31:42

hola, creo que el problema está en que no guardas informacion del socket cliente, y entonces no hay forma de que le puedas enviar un mensaje si no estas dentro del evento ONREAD.
En el Servidor deberias crear una variable tipo TCustomWinSocket y asignarle la variable socket del cliente en el evento ClientRead. Algo asi:

procedure TForm1.ss1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
lb1.Items.Add(socket.RemoteHost+' dice:');
lb1.Items.Add(socket.ReceiveText);
cli1:=socket;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
cli1.SendText(edit1.Text);
end;


Espero te sirva. No creo que sea optimo. Pero funciona.

Saludos

PD: Si te hace falta te envio el mini codigo que hice para esto.

cmm07 10-10-2008 02:34:23

gracias lo probaré, y si me gustaria mucho que subieras el ejemplillo, gracias muchas gracias..

JuanchoArg 10-10-2008 23:15:29

1 Archivos Adjunto(s)
aqui van los fuentes.


saludos

cmm07 11-10-2008 01:28:00

gracias, lo revisaré....


La franja horaria es GMT +2. Ahora son las 03:42:49.

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