| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/01/2009 07:22:02
|
thiagofesta
JavaGuru
![[Avatar]](/images/avatar/eff4ceddd4035b36233219a6ea4b889e.png)
Membro desde: 19/12/2007 10:42:11
Mensagens: 233
Offline
|
Olá a todos,
Eu tenho um socket, em um momento dele eu uso o DataInputStream para ler os bytes recebidos, pois bem, veja meu código:
Pois bem, ele retorna em quantidade nunca os 150, é sempre menos, mas ele lê todos os 150 certinho... pois o vetor fica completo com os dados que preciso.
É assim mesmo? ou estou fazendo algo errado?
Obrigado
|
"É melhor calar-se e deixar que as pessoas pensem que você é tolo, do que falar e acabar com a dúvida"
Abraham Lincoln |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/01/2009 09:17:53
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
?
Um socket normalmente nunca recebe todos os bytes de uma vez (portanto nunca espere que, enviando 150 bytes de uma vez de um lado, sejam recebidos exatamente 150 bytes em um único read).
Você deve estar fazendo alguma salada.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/01/2009 09:24:02
|
thiagofesta
JavaGuru
![[Avatar]](/images/avatar/eff4ceddd4035b36233219a6ea4b889e.png)
Membro desde: 19/12/2007 10:42:11
Mensagens: 233
Offline
|
thingol wrote:?
Um socket normalmente nunca recebe todos os bytes de uma vez (portanto nunca espere que, enviando 150 bytes de uma vez de um lado, sejam recebidos exatamente 150 bytes em um único read).
Você deve estar fazendo alguma salada.
Engraçado thingol, pois se eu debugo ele, ele passa apenas uma vez...
Estranho, mas não tem importância, só achei estranho, para mim isso não irá influenciar em nada.
Mas ele le tudo de uma vez, os 150.
Obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/01/2009 10:06:19
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Nunca confie nisso. No seu caso, debugando deu certo, porque deu tempo de os dados (que poderiam estar em um buffer de saída do socket ou um buffer de entrada do socket) chegarem todos.
O indicado é sempre passar o comprimento dos dados que você quer que sejam lidos do outro lado (talvez com writeInt) e então enviar os dados. O lado que recebe lê primeiro o comprimento (nesse caso com readInt) e depois os dados, acumulando-os até lê-los todos.
This message was edited 1 time. Last update was at 06/01/2009 10:06:51
|
|
|
 |
|
|