Problemas com socket

5 respostas
S

Estou com problemas ao usar socket,
tenho o seguinte codigo:

DataInputStream dataIn = new DataInputStream(inputStream); dataIn.skip(30);

o dataIn.skip(int n) deveria descartar o numero de bytes relativos ao int que eu coloco como parametro, mas o proprio metodo não garante isso…
alguem sabe de alguma forma para garantir o descarte dos bytes?

5 Respostas

rmarin

Tenta o skipBytes do DataInputStream.

http://java.sun.com/j2se/1.4.2/docs/api/java/io/DataInputStream.html#skipBytes(int)

S

Se for ver no javadoc, os metodos do InputStream e do OutputStream que recebem como parametro um array de byte, ou um int como o skip, não garantem a leitura de todos os bytes, e retornam um int com o numero de bytes lidos ou descartados… no socket existe uma função que garante a leitura de todos os bytes, em C essa função se chama MSG_WAITALL, em java, nem sei se ela foi implementada, mas acredito que sim.

T

O jeito mais bobo de garantir que você vai pular 30 bytes é ler 30 bytes (retentando a leitura caso necessário) e descartar os bytes. Já tive alguns problemas com “skip”, mas isso é porque eu estava escrevendo uma rotina de criptografia que encapsulava um InputStream.

S

É isso msm que eu faço, mas gostaria de poder usar o skip :frowning:

T

Você precisa fazer um loop com skip, levando em conta a quantidade de bytes que ele conseguiu pular. (Skip e skipBytes fazem exatamente isso).
É sempre assim que se trabalha com sockets - as rotinas normalmente não garantem que vâo ler exatamente a quantidade de dados que você solicitou, podendo retornar antes. Então você tem de ir acumulando os dados já recebidos até conseguir montar as coisas do jeito que você quer.

Criado 12 de setembro de 2007
Ultima resposta 13 de set. de 2007
Respostas 5
Participantes 3