Tenho o seguinte problema:
Existe uma aplicação Java (Login) que envia login e senha para um server em C. Ele recebe a mensagem e deveria apenas repassá-la, escrevendo na rede. Então tenho outro aplicativo Java (Receiver), cuja função seria ler essa mensagem e escrevê-la na tela.
O problema é que o server indica que foram recebidos login e senha, mas o Receiver não consegue ler. Acho que não estou sabendo ler da forma correta
Veja o código do Receiver:
public static void main(String[] args)
{
byte[] b = new byte[1024];
// conexão com o servidor do jogo
try
{
Socket sock = new Socket("10.1.1.14",9000);
DataInputStream is = new DataInputStream(sock.getInputStream());
System.out.println("Recebi: [" + is.read(b) + "]");
//is.close(); //debug
//sock.close(); //debug
}
catch (UnknownHostException e)
{
System.out.println("Pau na conexão..");
System.exit(1);
}
catch (IOException e)
{
System.out.println("Pau de I/O.");
System.out.println(e);
System.exit(1);
}
}
O metodo read(byte[]) não garante a leitura de todos os bytes do array passado como parametro,
ele simplesmente as vezes le, as vezes não
provavelmente esse é o problema.
[quote=stiven]O metodo read(byte[]) não garante a leitura de todos os bytes do array passado como parametro,
ele simplesmente as vezes le, as vezes não
provavelmente esse é o problema.[/quote]
read retorna com os bytes que ele conseguiu ler do socket na hora; você tem de continuar lendo (e juntar os dados em um buffer qualquer) até chegar ao tamanho desejado. É para isso que read lhe retorna a quantidade de dados que conseguiu ler, para você mesmo fazer o controle.
Se souber que a leitura pode lhe retornar no máximo X bytes, você pode alocar um array de X bytes, e criar um loop que usa a outra versão de read que usa 3 argumentos: o buffer, o offset, e o comprimento. Aí voc~e não precisa fazer um buffer que se expande.