Corrompendo a mensagem SOCKET
Olha só, tenho uma aplicação para Lan House que se comunicam (Cliente e Servidor) por sockets. Até aí tudo bem, mas em algumas máquinas aleatórias a mensagem enviada chega errada no Cliente. Meu protocolo é delimitado por linhas e às vezes a mensagem pula uma linha.
Alguém já viu esse tipo de erro?
Alguém já viu esse tipo de erro?
Grandeneo
Curtidas 0
Respostas
Massuda
17/10/2007
Se você estiver usando TCP, então o erro é no seu programa. O protocolo TCP garante que os pacotes de chegam corretamente no destino.
Se estiver usando UDP, pode ocorrer perda de pacote de dados, mas isso é previsto no protocolo e não há como evitar isso.
Se estiver usando UDP, pode ocorrer perda de pacote de dados, mas isso é previsto no protocolo e não há como evitar isso.
GOSTEI 0
Grandeneo
17/10/2007
Veja bem....eu envio assim:
<comando1>mostre janela
<comando2>fecha programa
<comando9>sair
e recebo assim:
<coman
do1>mostre janela
<comando2> fecha j
anela
<
comando9>
sair
tem alguma maneira de prever issu?
<comando1>mostre janela
<comando2>fecha programa
<comando9>sair
e recebo assim:
<coman
do1>mostre janela
<comando2> fecha j
anela
<
comando9>
sair
tem alguma maneira de prever issu?
GOSTEI 0
Massuda
17/10/2007
Como você está lendo esses dados? Mostre o código.
GOSTEI 0
Grandeneo
17/10/2007
no Servidor:
for I:= 0 to SS.Socket.ActiveConnections- 1 do
SS.Socket.Connections[I].SendText(Memo1.Text);
no Cliente:
procedure TFCli.CSRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Text:= Socket.ReceiveText;
end;
tentei tb fazer issu com o SendBuffer mas tb dá errado.
for I:= 0 to SS.Socket.ActiveConnections- 1 do
SS.Socket.Connections[I].SendText(Memo1.Text);
no Cliente:
procedure TFCli.CSRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Text:= Socket.ReceiveText;
end;
tentei tb fazer issu com o SendBuffer mas tb dá errado.
GOSTEI 0
Massuda
17/10/2007
Agora que percebi que você está usando TServerSocket/TClientSocket (ou coisa parecida)... não conheço esses componentes, mas sugiro você receber os dados no cliente e ir acumulando (por exemplo, em uma string) até ter um comando completo e só aí tratar o comando.
TCP garante a chegada dos dados na ordem que eles foram enviados, mas não garante que eles cheguem todos juntos, o que, aparentemente, é o que está acontecendo com você.
TCP garante a chegada dos dados na ordem que eles foram enviados, mas não garante que eles cheguem todos juntos, o que, aparentemente, é o que está acontecendo com você.
GOSTEI 0