ClientSocket

05/12/2005

Olá colegas

Eu uso Delphi 6 e utilizo o componente client Socket da FastNet.

Gostaria de saber a possibilidade de setar a porta local deste componente, mas não consigo, pois ele diz que é uma propriedade read only.

Em todo caso se alguém tiver alguma idéia de como fazer isso, ficarei agradecido, pois uso este componente em vários projetos, mas caso alguém tenha outra sugestão tb é bem aceito.

Abraços

George


George_piaulino

Respostas

05/12/2005

Nildo

Olá colegas Eu uso Delphi 6 e utilizo o componente client Socket da FastNet. Gostaria de saber a possibilidade de setar a porta local deste componente, mas não consigo, pois ele diz que é uma propriedade read only. Em todo caso se alguém tiver alguma idéia de como fazer isso, ficarei agradecido, pois uso este componente em vários projetos, mas caso alguém tenha outra sugestão tb é bem aceito. Abraços George


Acho que voce tem que desativar a conexão dele antes de alterar a porta.


Responder Citar

05/12/2005

George_piaulino

[quote:14e76bb37a=´piaulino´]Olá colegas Eu uso Delphi 6 e utilizo o componente client Socket da FastNet. Gostaria de saber a possibilidade de setar a porta local deste componente, mas não consigo, pois ele diz que é uma propriedade read only. Em todo caso se alguém tiver alguma idéia de como fazer isso, ficarei agradecido, pois uso este componente em vários projetos, mas caso alguém tenha outra sugestão tb é bem aceito. Abraços George


Acho que voce tem que desativar a conexão dele antes de alterar a porta.[/quote:14e76bb37a]


Isso eu sei, mas gostaria que vc tentasse mudar essa propriedade da porta local, a propriedade eh localporta via código, e isso não consigo.

Mas valeu pela dica


Responder Citar

05/12/2005

Nildo

Isso eu sei, mas gostaria que vc tentasse mudar essa propriedade da porta local, a propriedade eh localporta via código, e isso não consigo. Mas valeu pela dica


Bom, daí já não sei. Mas parece que o TServerSocket da palesta Internet também não é possível mudar a portal local. Se eu não me engano também, os da Indy funcionam perfeitamente!


Responder Citar

05/12/2005

Thomaz_prg

Pessoal, me corrijam se eu estiver errado, mas, se em Port você colocar 127.0.0.1 ele não irá buscar localmente??

Isso seria equivalente a buscar um host local, colocando LocalHost no nome do host... faço assim e funciona.


Responder Citar

05/12/2005

George_piaulino

Caros colegas

é o seguinte, o componente é o TclientSocket e o problema é o seguinte, isto é se for um problema.

Ao enviar uma mensagem ou um buffer para o TseverSocket, com certeza o Server vai me informar o IP e a porta de de origem, mas todavia ao me informar ele me indica portas sequênciais.

O que preciso é a possibilidade de setar a propriedade do LocalPort do TclientSocket como por exemplo 7500, mas infelizmente ele não deixa me informando que é uma propriedade Read Only.

Não me preocupo com o local host, pois o próprio componete já faz isso automaticamente.

Agora se não existe a possibilidade, terei uma grande diversão de alterar meus projetos...hehehehehehehehehe...

Mas em todo caso fico feliz pela atenção dada e caso alguém queira me sugerir algum outro método ou componente ficarei ainda mais feliz.

Como citou nosso colega anteriormente, a preguiça eh jogo duro.

Mas caso vcs analise faça um projeto client e um outro server e vcs verão qual porta de oprigem do client.

Abraços e vou a luta.

George


Responder Citar

05/12/2005

Massuda

...O que preciso é a possibilidade de setar a propriedade do LocalPort do TclientSocket como por exemplo 7500, mas infelizmente ele não deixa me informando que é uma propriedade Read Only.
Normalmente essa porta é escolhida pelo Windows, no intervalo 1024 a 5000. É mais eficiente deixar o Windows escolher essa porta do que você fixá-la e em todos os protocolos de aplicação (HTTP, FTP, etc) não faz diferença qual é essa porta.


Responder Citar

07/12/2005

George_piaulino

Para o conhecimento de todos segue a solução deste problema


procedure TForm1.ClientSocket1Lookup(Sender: TObject; Socket: TCustomWinSocket);
var
Addr: TSockAddrIn;
teste, Err: Integer;

begin
teste:=0;
FillChar(Addr, teste, SizeOf(Addr));
Addr.sin_family := PF_INET;

Addr.sin_addr.s_addr := INADDR_ANY;
// if you want to bind to a specific local IP instead:
// Addr.sin_addr.s_addr := inet_addr(´the ip address here´);

Addr.sin_port := htons(7000);

if bind(Socket.SocketHandle, Addr, SizeOf(Addr)) <> 0 then
begin
Err := WSAGetLastError;
if Err <> WSAEWOULDBLOCK then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(Err), Err, ´bind´]);
end;


Responder Citar