Problema com Socket (erro 10048)
Olá a todos..
Eu tento conectar.. blz, tudo certo..
fecho o cliente..
ao abrir denovo e tentar conectar.. ´Erro 10048, conexão já existente´
Não estou desconectando corretamente a fechar o cliente?
Têm como eu fechar todas as conexões? ou algo assim antes de conectar?
valeu
Eu tento conectar.. blz, tudo certo..
fecho o cliente..
ao abrir denovo e tentar conectar.. ´Erro 10048, conexão já existente´
Não estou desconectando corretamente a fechar o cliente?
Têm como eu fechar todas as conexões? ou algo assim antes de conectar?
valeu
Amon-ra
Curtidas 0
Respostas
Crash
28/09/2005
esse erro ocorre no cliente?
GOSTEI 0
Crash
28/09/2005
caso for no cliente tente ClientSocket.Active:= False;
ou ClientSocket.Socket.Disconnect;
ou ClientSocket.Socket.Disconnect;
GOSTEI 0
Amon-ra
28/09/2005
caso for no cliente tente ClientSocket.Active:= False;
ou ClientSocket.Socket.Disconnect;
Ocorre no cliente, isso que você falou eu já tentei não dá :(
Eu trato o erro.. aí peço pra desconectar e tentar denovo.. só que tenho q esperar um tempo sem executar o programa pra porta deixar de estar sendo usada.
GOSTEI 0
Martins
28/09/2005
[quote:3931811eae=´Amon-Ra´]
Ocorre no cliente, isso que você falou eu já tentei não dá :(
Eu trato o erro.. aí peço pra desconectar e tentar denovo.. só que tenho q esperar um tempo sem executar o programa pra porta deixar de estar sendo usada.[/quote:3931811eae]
Como é q vc tá fazendo a conexão e como está fechando? Posta aqui um pedaço dos códigos.
caso for no cliente tente ClientSocket.Active:= False;
ou ClientSocket.Socket.Disconnect;
Ocorre no cliente, isso que você falou eu já tentei não dá :(
Eu trato o erro.. aí peço pra desconectar e tentar denovo.. só que tenho q esperar um tempo sem executar o programa pra porta deixar de estar sendo usada.[/quote:3931811eae]
Como é q vc tá fazendo a conexão e como está fechando? Posta aqui um pedaço dos códigos.
GOSTEI 0
Amon-ra
28/09/2005
procedure Tlincenet.Button1Click(Sender: TObject); var teste : TTreeNode; begin try IdTCPClient1.Connect; except IdTCPClient1.IOHandler.Free; end; end; procedure Tlincenet.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin Application.ProcessMessages; IdTCPClient1.DisconnectSocket; IdTCPClient1.Disconnect; end;
É isso, por q é só um teste mesmo..
Aproveitando o servidor é assim:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin IdTCPServer1.Active := false; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if IdTCPServer1.Active then begin end else begin end; end; procedure TForm1.Button1Click(Sender: TObject); begin if IdTCPServer1.Active = true then begin Button1.Caption := ´Conectar´; IdTCPServer1.Active := false; end else begin Button1.Caption := ´Desconectar´; IdTCPServer1.Active := true; end; end; procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var funcionando : boolean; temp : string; begin funcionando := true; while funcionando do begin try temp := AThread.Connection.ReadLn(); except funcionando := false; end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin form2.Show; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end;
GOSTEI 0
Massuda
28/09/2005
Me parece que você está usando Indy e não TClientSocket/TServerSocket.
Com relação ao seu código cliente, experimente fazer assim (não testei)...
Já o código do servidor tem um pequeno problema......a diferença é que é feito um teste para ver se a thread foi interrompida pelo servidor (AThread.Stopped) e inclui um timeout (tempo máximo de espera) na leitura da string (não testei). Isso é necessário porque o servidor não detecta de imediato a desconexão do cliente (isso é característica do meio de comunicação, não é problema do Indy).
Com relação ao seu código cliente, experimente fazer assim (não testei)...
procedure Tlincenet.Button1Click(Sender: TObject); var teste : TTreeNode; begin try IdTCPClient1.Connect; except // isto não é necessário! //IdTCPClient1.IOHandler.Free; end; end; procedure Tlincenet.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin // isto não é necessário! //Application.ProcessMessages; //IdTCPClient1.DisconnectSocket; IdTCPClient1.Disconnect; end;
Já o código do servidor tem um pequeno problema...
uses IdGlobal, ... procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var funcionando : boolean; temp : string; begin funcionando := true; while funcionando and not AThread.Stopped do begin try temp := AThread.Connection.ReadLn(LF, 500); except funcionando := false; end; end; end; ...
GOSTEI 0
Martins
28/09/2005
Me parece que você está usando Indy e não TClientSocket/TServerSocket.
Com relação ao seu código cliente, experimente fazer assim (não testei)...
Já o código do servidor tem um pequeno problema......a diferença é que é feito um teste para ver se a thread foi interrompida pelo servidor (AThread.Stopped) e inclui um timeout (tempo máximo de espera) na leitura da string (não testei). Isso é necessário porque o servidor não detecta de imediato a desconexão do cliente (isso é característica do meio de comunicação, não é problema do Indy).
procedure Tlincenet.Button1Click(Sender: TObject); var teste : TTreeNode; begin try IdTCPClient1.Connect; except // isto não é necessário! //IdTCPClient1.IOHandler.Free; end; end; procedure Tlincenet.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin // isto não é necessário! //Application.ProcessMessages; //IdTCPClient1.DisconnectSocket; IdTCPClient1.Disconnect; end;
uses IdGlobal, ... procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var funcionando : boolean; temp : string; begin funcionando := true; while funcionando and not AThread.Stopped do begin try temp := AThread.Connection.ReadLn(LF, 500); except funcionando := false; end; end; end; ...
Blz [b:8a10d2ecab]Massuda[/b:8a10d2ecab], até eu vou fazer uns testes aqui. Show de bola!!!!
GOSTEI 0