PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Tserversocket não recebe a mensagem. #261349

10/12/2004

0

na minha aplicação, coloquei um componente TserverSocket, e no evento ClientWrite coloquei o seguinte código:
procedure TFRM_Principal.ServersockClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
var
  mmsg,IP:string;
begin
   mmsg:=Socket.ReceiveText;
  Ip:=Socket.remoteAddress;
  end;
[...]
Já faz algum tempo que não uso TServerSocket/TClientSocket, mas se não me engano o certo seria o seu servidor ler os dados no evento [b:38033105f5]TServerSocket.OnClientRead[/b:38033105f5].

Quanto ao IP, ele estará certo enquanto existir a conexão.


Massuda

Massuda

Responder

Posts

10/12/2004

Massuda

[...] uso o seguinte código para enviar a mensagem:
try

st:=TStringStream.Create(´[´+Pestacao+´](´+Pnomeuser+´)´+edtmsg.Text);
        cliente.Close;
        cliente.Address:=Pip;
        cliente.Open;

cliente.Socket.SendText(´[´+Pestacao+´](´+Pnomeuser+´)´+edtmsg.Text);
        cliente.Close;
      except
        on E:Exception do
        Begin
          ShowMessage(e.Message);
        End;
      end;
Acho que o problema aqui é cliente.Close logo após o cliente.SendText... como seu cliente deve ser do tipo ctNonBlocking, SendText retorna após bufferizar o texto para envio; quando o Close é executado, não há garantia de que o texto tenha sido enviado. Experimente por um Application.ProcessMessages antes do cliente.Close.

Quanto ao IP do cliente que você obtem no servidor, ele está disponível a partir do instante que a conexão é estabelecida, independente de ter transmitido/recebido dados do cliente. O IP do cliente pode ser obtido a partir do instante que o servidor gera o evento TServerSocket.OnAccept.

Finalmente, duas sugestões...[list:741f871482][*:741f871482]Dê uma olhada no exemplo que está no subdiretório Demos\Internet\Chat que existe no diretório do Delphi, que implementa um chat usando TServerSocket e TClientSocket[*:741f871482]Para programar comunicação de dados num estilo sequencial (abre, lê/escreve, fecha) é mais fácil se você optar por usar o Indy.[/list:u:741f871482]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar