Olá Pessoal!
Estou tentando enviar uma string de um cliente em delphi para um servidor em java utilizando sockets TCP, mas qdo eu envio o alguma coisa me ocorre o seguinte erro: java.io.StreamCorruptedException: invalid stream header.
No java eu estou usando a classe ObjectInputStream para receber os dados e no Delphi uso o seguinte codigo baseado nos componentes Indy Clients:
procedure TClientFrmMain.ButtonSendClick(Sender: TObject);
var
CommBlock : TCommBlock;
begin
CommBlock.Command := EditCommand.Text; // assign the data
CommBlock.MyUserName := Client.LocalName;
CommBlock.Msg := EditMessage.Text;
CommBlock.ReceiverName := EditRecipient.Text;
Client.WriteBuffer (CommBlock, SizeOf (CommBlock), true);
end;
Alguem saberia me dizer como teria de ser esse cabeçalho da stream para q o servidor java interprete corretamente o q o cliente delphi esta mandando?
Muitissimo Obrigado, caso alguem possa me ajudar.
Bom…
Veja a “endianness” dos bytes em Java e Delphi… Se não me engano, Java é Big Endian, então os bytes que você vai mandar tem que estar ordenados segundo este critério. Se Delphi for diferente (Little Endian), vc pode tanto ordernar os bytes no lado Delphi para BIG_ENDIAN, ou fazer o lado Java receber os bytes em LITTLE_ENDIAN e depois re-ordenálos.
Quanto ao “cabeçalho” para o envio dos dados, se o problema for esse, aí é uma questão de protocolo. Teria que ver mais a fundo o que você está fazendo pra entender o problema, se for isso ao invés da ordenação dos bytes.
Por que você está usando objectStreams? O que você quer não são java.lan.String, são simplesmente cadeias de caracteres. Utilize outro tipo de stream.
[quote=fernandogdt]Olá Pessoal!
Estou tentando enviar uma string de um cliente em delphi para um servidor em java utilizando sockets TCP, mas qdo eu envio o alguma coisa me ocorre o seguinte erro: java.io.StreamCorruptedException: invalid stream header.
No java eu estou usando a classe ObjectInputStream para receber os dados e no Delphi uso o seguinte codigo baseado nos componentes Indy Clients:
[/quote]
Jogue fora a implementação em Java usando ObjectInput/OutputStream, porque ela só serve para comunicar dois programas Java. A menos que você entenda totalmente como é que funciona ObjectInput/OutputStream, e reimplemente tudo em Delphi (o que vai ser muito chato
), use DataInput/OutputStream, e como disse, cuidado com a “endianness” também.
Pessoal, me desculpem a ignorancia mas, o q eh e como q funciona o “endianess”? Alguem sabe onde teria algum material referente a isso?
Valeu!