00 BB que é igual a 187 que por sinal é o tamanho correto da string.
lucas.cs
vou colocar aqui o fragmento que gera o código.
StringBuffersb=newStringBuffer(iConteudo);// Pega o texto passado como parametrointaxLen=sb.length();// Determina o tamanho do parametro//Exemplo 1 para pegar o tamanho em hex da stringintparteAlta=((axLen>>4)&0xf)<<4;intparteBaixa=axLen&0xf;if(parteAlta==0)sb.insert(0,(char)'0');sb.insert(0,(char)(parteAlta|parteBaixa));//Exemplo 2intl=(sb.length()&0xFF);inth=((sb.length()>>8)&0xFF);//Exemplo 3inth=(axLen/256);intl=axLen-(h*256);// Concatena para os exemplos 2 e 3sb.insert(0,(char)l);sb.insert(0,(char)h);/**/saida=newPrintStream(socket.getOutputStream());saida.print(sb);saida.flush();
no DataOutputStream como enviarStringBuffer?
pode ser no PrintStream também o erro.
ViniGodoy
Pois é, esse C2 está sendo inserido, provavelmente pelo PrintStream. Tente usar o DataOutputStream.
Já usou o depurator para imprimir o valor das variáveis l e h? Garanto que nenhuma delas vale 194.
lucas.cs
ViniGodoy:
Pois é, esse C2 está sendo inserido, provavelmente pelo PrintStream. Tente usar o DataOutputStream.
Já usou o depurator para imprimir o valor das variáveis l e h? Garanto que nenhuma delas vale 194.
sim elas, valem realmente o que deveriam valer.
deve ser o PrintStream mesmo, mais no caso do DataOutputStream como enviar StringBuffer?
ViniGodoy
Use o método getBytes() da classe String.
lucas.cs
obrigado.
lucas.cs
não foi dessa vez, o C2 intruso continua aparecendo na mensagem.
interessante que o C2 só aparece se a mensagem tiver mais de 100 caracteres, até 99 ele não aparece.
lucas.cs
Problema resolvido.
o Caminho foi pelo DataOutpuStream.
usei o writeutf() que diz o tamanho e o DataInputStream.readUTF automaticamente lê o tamanho e os bytes necessários para criar a String.
Eu não sabia que vc podia enviar os dados em UTF. Eu já havia pensado nele.
Mas a regra é: Quando for transferir dados, nunca usa PrintWriter, ou converta dados para String antes de envia-los.
Tem sempre que lembrar que Strings tem diversos formatos (ISO, UTF, ASCII) e o Java pode resolver converte-los. Aí, o que você escreve em binário nem sempre vai ser o que circula pela rede…
lucas.cs
ViniGodoy:
Eu não sabia que vc podia enviar os dados em UTF. Eu já havia pensado nele.
Mas a regra é: Quando for transferir dados, nunca usa PrintWriter, ou converta dados para String antes de envia-los.
Tem sempre que lembrar que Strings tem diversos formatos (ISO, UTF, ASCII) e o Java pode resolver converte-los. Aí, o que você escreve em binário nem sempre vai ser o que circula pela rede…
entendi a lição.
agora vamos ao outro problema. rsrssr
mais é mais simples.
eu recebo a mensagem pelo BufferedReader.
Como descobrir então o tamanho da mensagem que eu recebo, ela vem nos dois bytes iniciais também.