Problemas de comunicação usando Sockets

Olá pessoal,

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 :slight_smile:

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);
		}
		
	}

Agradeço se alguém puder ajudar.

eu uso assim byte[] b = new byte[256];
o TCP tem limitação de bytes, não sei se resolve.

Espero ter ajudado

t+

exemplo q tenho:

DataInputStream in;

bRetorno = new byte[256];
in.read(bRetorno);

String str_ret=new String(bRetorno);

t+

Seria legal dizer qual foi o erro, isto é, a exception.

O problema é que não gerou Exception, o programa ficou parado, esperando, por isso que disse que ele não conseguia ler…

Entao debuga do lado do servidor, que não está enviando nada para esse programa aí.

Good Luck!

Simples, o servidor não tá mandando dado algum.

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.