Envio de dados no socket

Boa tarde,
Gostaria de saber com vocês qual seria a melhor forma de mim enviar meus dados para meu socket, mas a lógica, não a questão de classes.

Observem, meu eu possuo um server (ServerSocket), e vários clientes (Socket), todos que querem se comunidar, se conectam no server para serem redirecionados, por exemplo, eu sou A, vc é B, eu quero mandar um oi para você, eu A envio o oi para o server, o server verifica para quem é para encaminhar, e envia.

Certo agora que entenderam o funcionamento do meu socket, gostaria de saber como faço para enviar uma sequência de bytes, desta forma.

Tenho 2 tipos de “dados” que envio, comandos, e imagens.
os comandos são enviados assim: escrevo um inteiro com número 0, depois o tamanho do comando, depois o comando.
as imagens são enviadas assim: escrevo um inteiro com número 1, depois criei uma variavel de controle(1234), ai envio as partes das imagens em bytes e quando termina envio o código de saída (4321).

Seria algo assim:

while(true) { if(O QUE RECEBE != 1234) { break; } //pego a parte e vou guardando }

Mas estou com problemas, isto está meio ruim a meu ver, as vezes não funiona direito, os comandos eu envio perfeitamente, mas quando é imagens, da altos erros no socket, na verdade ele começa e vai, mas sempre da problema.

Alguém imagina uma forma mais legal de enviar?

Obrigado!

Bem pessoal, eu fiz dessa forma, e está funcionando, porém é muito lento, ele faz as verificações no cliente que envia, no server e no cliente que recebe…
Imaginam um jeito mais otimizado para tal coisa?

Usando sockets, em vez de ficar usando “write(int b)”, que só escreve um byte por vez, procure usar “write(byte[] buf, int off, int len)” no OutputStream do Socket, que escreve mais dados por chamada de método. Para ler também, prefira usar “read(byte[] buf, int off, int len)” no InputStream do Socket. Veja se tu define também algum protocolo para “sincronizar” as escritas e leituras.

Inté.

Acho que ele precisa postar o código que ele já fez. Uma vez eu já postei aqui um código que faz a transferência de um arquivo via sockets, mas deve haver mais algum detalhe que ele não entendeu.

[quote=KWill]Usando sockets, em vez de ficar usando “write(int b)”, que só escreve um byte por vez, procure usar “write(byte[] buf, int off, int len)” no OutputStream do Socket, que escreve mais dados por chamada de método. Para ler também, prefira usar “read(byte[] buf, int off, int len)” no InputStream do Socket. Veja se tu define também algum protocolo para “sincronizar” as escritas e leituras.

Inté.[/quote]

Foi isso mesmo o que você falou, o thiagol também havia me passado um código anteriormente, e eu vi lá, ele faz dessa forma que você disse, que é a mesma que estou usando.

Estou capturando a imagem da tela de 1280x1024, e capturo cada pixels da tela, e envio somente os que foram alterados, envio em blocos de 100x100.
Está lentidão não seria por causa da quantidade de bytes que envia? são 1001003 cada bloco, sendo cada imagem de 143 blocos (1280x1024)?

Obrigado!