Array
(
)

ClientSocket

George_piaulino
   - 05 dez 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


Nildo
   - 05 dez 2005


Citação:
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.


George_piaulino
   - 05 dez 2005


Citação:

Citação:
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.



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


Nildo
   - 05 dez 2005


Citação:
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!


Thomaz_prg
   - 05 dez 2005

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.


George_piaulino
   - 05 dez 2005

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


Massuda
   - 05 dez 2005


Citação:
...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.


George_piaulino
   - 07 dez 2005

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;