Sockts Java X PHP

7 respostas
J

Oi

Pessoal, estou precisando de uma ajuda urgente de vcs. Estou com um probleminha em um projjeto que estou trabalhando.

Tenho um servidor que gera dados aleatoriamente para os testes durante o andamento do projeto, porém está em PHP e tenho que fazer uma conxão via socket de uma applet para ele. Até aí tudo blz.

sk = new Socket("192.168.1.211",7777);
			
			output = new ObjectOutputStream(sk.getOutputStream());
			output.flush();

			output.writeObject("GET / HTTP/1.0\n\n");
			output.flush();
			
			input = new ObjectInputStream(sk.getInputStream()); //PARA AQUI

A conexão via socket não é o problema, o trecho acima funciona bem, eu vejo no servidor que o processo iniciou, mas o servidor só envia dados se eu enviar uma String para ele, e é aí que está o problema, o servidor precisa receber esta String output.writeObject("GET / HTTP/1.0\n\n"); e quando envio está String ele só recebe 1 (um), fica um monte de uns... E depoiis fica tudo parado, obviamente esperando em input = new ObjectInputStream(sk.getInputStream()); porque o servidor não recebeu a String.

Se alguém tiver alguma idéia ou solução, mada aí.

T+

7 Respostas

J

Oi

uuooowwww.. Consegui fazer o servidor entender a mensagem, agora ele já estando quando eu envio a String de conexão, só que agora o erro é o outro: StreamCorruptedException.... Ou seja, o erro agora é ao receber os dados do servidor.

Eu resolvi o problema assim:

No lugar do ObjectOutputStream eu usei um PrintStream com o método abaixo:

ps = new PrintStream(sk.getOutputStream());
		writeNetPrintStream(ps,"GET / HTTP/1.0

");

void writeNetPrintStream(PrintStream output, String str) {
		byte[] b;
		
		int l = str.length();
		b = new byte[l];
		str.getBytes(0, l ,b , 0);
		System.out.println("Tentando enviar Bytes - PrintStream");
		try {
			output.write(b);
			System.out.println("OK - bytes PrintStream");
		}
		catch(IOException ioex) {
		}
		
	}

T+

J

Oi

Pessoal, agora eu consegui resolver o problema sim, estou enviando a String GET para o servidor e estou lendo os dados recebidos normalmente...

try {
			sk = new Socket("192.168.1.211",7777);

	        ps = new PrintStream(sk.getOutputStream(), true);
			ps.print("GET / HTTP/1.0\n\n");
			
			BufferedReader buff = new BufferedReader(new InputStreamReader(sk.getInputStream()));
			String result;     
			while ((result = buff.readLine()) != null)
					System.out.println(result);
			
		}
		catch (UnknownHostException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}

Como eu sou um cara persistente e egoísta :D :D :D , esta discussão foi só minha.. khakuhakuhakuhakhua

T+ :wink:

J

hahahahahaha

O Jeve apavora… num da nemchance dos caras responderem… hahahaha puts!

Falous!!

J

Oi

jhakhakuha Falou jujo…

Tu viu os horários dos posts??? EU fiz tudo durante a tarde. Cara quando estou fazendo alguma coisa que não da certo eu fico doido… TEM QUE DAR CERTO…

T+ :smiley: 8O 8O :smiley:

H

Muito bem, Jâvêê!

Só para deixar kraro para a galera: o tráfego HTTP é feito em ASCII puro, portanto nem em UTF-8 ou alguma outra forma de Unicode. Então as strings devem ser convertidas assim:

OutputStream out = socket.getOutputStream();
out.write(“GET / HTTP/1.0\r\n”.getBytes());

que é justamente o que o fluxo PrintStream faz e não outros.

J

Oi

É isso mesmo hipersoft, na hora eu nem tinha me tocado disso, mas depis me lembrei… Tb consegui fazer usando java.net.URL, fica ainda mais fácil.

T+

H

Acho a classe URL pouco fexível, J’vê. Construí uma bateria de testes de regressão usando somente a classe Socket, ficou perfeito.

Criado 12 de fevereiro de 2004
Ultima resposta 13 de fev. de 2004
Respostas 7
Participantes 3