Enviar array de bytes via socket java

Olá a todos.

Estou precisando enviar um array de bytes via socket, estou utilizando este codigo.


Socket s = new Socket(ipServidor, porta);
OutputStream out = s.getOutputStream();
//bytes = meu array de bytes.
out.write(bytes);
out.flush();

Só que preciso ler no servidor este array de bytes para começar a trata-lo, e vi alguns metodos do DataInputStream e não encontrei nada que le-se um array de bytes, ja conseguie enviar Strings, inteiros, etc… mas um array de bytes, como faria?

Ficarei muito agradecido quem puder ajudar.

Abraço!

O método read de InputStream (e DataInputStream) permite ler um array de bytes.

DataInputStream.read

Opa,

Eu ja tentei usar este metodo so que ele me retorna mais bytes do que eu envio… geralmente envio uns 122 bytes e ele recebe 241 por ae…

Ja tentei DataInputStream, ObjectInputStream e nao ta dando certo =/

Se alguem tiver uma solução, agradeço.

[quote=MKThEbEsT]Opa,

Eu ja tentei usar este metodo so que ele me retorna mais bytes do que eu envio… geralmente envio uns 122 bytes e ele recebe 241 por ae…

Ja tentei DataInputStream, ObjectInputStream e nao ta dando certo =/

Se alguem tiver uma solução, agradeço.[/quote]

Em sockets é muito comum você tentar ler alguma coisa, e receber mais ou menos coisas que está esperando.

Isso é inerente aos sockets TCP/IP; não há como evitar isso.

Por isso, normalmente você é que tem de criar suas próprias mensagens.

Se quiser enviar 100 bytes, por exemplo, crie uma mensagem que contém o número de bytes a serem recebidos do outro lado, e então os bytes em si.

Por exemplo, digamos que você queira enviar 8 bytes (CA FE BA BE DE AD BE EF).

O código que envia os bytes deve enviar, primeiramente, 2 bytes que indicam o comprimento da sua mensagem (nesse caso, 00 08 ).

Depois, enviar os restantes 8 bytes (CA FE BA BE DE AD BE EF).

O código que recebe os bytes deve pegar então 2 bytes, usando a rotina readShort (da classe DataInputStream); nesse caso, irá receber um short com o valor 8.

Isso feito, o seu programa que lê os bytes pode definir um array de bytes de 8 posições, e então passá-lo para a rotina read.

OK?

Ola entanglement

tenho uma duvida …

pelo Socket podemos enviar ou receber mais que 255 bytes ?

Exemplo: um arquivo.txt.

obrigado

entanglement, muito obrigado.

Consegui aqui ;D.

agora surgiu uma duvida, eu to usando algo em que o Usuario digita o tamanho dos pacotes que envia via socket… um exemplo:
O cara quer enviar um arquivo de 10mb via socket.
Ele pode definir que seja enviado em pacotes de 10k por exemplo, entende?

Com isso eu to conseguindo enviar direitinho arquivos pequenos(de ate uns 7 mb), quando tento enviar arquiuvos maiores… tipo de 20 mb ja da este erro:

xception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

Estou enviando os arquivos via DataInputStream, tem algo haver com isso?

Abraço!