Duvida em socket

Bom dia :smiley:

Tenho os 2 classes abaixo:

public class SocketCliente {
	public static void main(String[] args) {
		try {
			//conecta no servidor
			Socket client = new Socket("192.168.0.119", 3500);
			
			//Cria um canal para receber dados
			DataInputStream in = new DataInputStream(client.getInputStream());
			
			//Cria um canal para enviar dados
			DataOutputStream out = new DataOutputStream(client.getOutputStream());
			
			//Realiza comunicação com o servidor
			out.writeInt(3); //envia Int 3
			out.writeUTF("Oi mundo"); // Envia String Oi mundo

			int k = in.readInt(); // aguarda receber um inteiro
			String b = in.readUTF(); //aguarda receber uma string
			
			//Fecha os fluxos
			in.close();
			out.close();
			//System.out.println(k + b);
			//Fecha o socket
			client.close();
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
public class SocketServer {
	public static void main(String[] args) {
		try {
			//Cria socket na porta 3500
			ServerSocket serverSocket = new ServerSocket(3500);
			
			//O metodo accept retorna um socket para comunicação com o proximo cliente a conectar
			//A execução bloqueia até que algum cliente conecte
			Socket socket = serverSocket.accept();
			
			//Cria canal para receber dados
			DataInputStream in = new DataInputStream(socket.getInputStream());
			
			//Cria um canal para enviar dados
			DataOutputStream out = new DataOutputStream(socket.getOutputStream());
			
			//Aguarda receber int e uma String
			int k = in.readInt();
			String x = in.readUTF();
			
			//Envia string e int
			out.writeUTF("Recebi e fiquei maroto :D");
			out.writeInt(10);
			
			//Fecha In e Out
			in.close();
			out.close();
			
			//Fecha o socket do cliente
			socket.close();
			
			//Fecha o socket do server
			serverSocket.close();
			
			//System.out.println(k + x + "recebi do client");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Eu primeiro rodo a server e ela fica lá esperando receber a conexão e quando eu rodo a client, ela não teria que imprimir o que a ‘server’ mandou pra ela?

Eu recebo o erro de vc:

A linha 26 é a que está esperando para ler um inteiro vindo do client, não to conseguindo descobrir o que está errado no meu código, alguém pode me ajudar?
[]'s

Na realidade quem manda o primeiro serviço,
(no caso o serviço de ativação) é o client…

Esse seu problema, esta ocorrendo no envio do client, ou na resposta do server?

Hm…primeira vez que to usando sockets hehe :smiley:

Então, eu coloquei os 2 System.out.println para ver até onde chegava, na classe do server, ele consegui imprimir o que eu mando

Mas na classe cliente, parece que ela não está recebendo nada da classe server…e pelo erro que dá, parece que é quando vai receber o Int da client, mas ela imprime numa boa…fikei perdido :shock:

Caramba NAO PERCEBI :oops: :oops: :oops: :oops:

:roll:

[quote=javaAurelio]Caramba NAO PERCEBI :oops: :oops: :oops: :oops:

:roll:[/quote]

Ainda bem q tem gente que ajuda pra cacete aqui, né? :smiley:

agora eu rodo e simplesmente não acontece nada :evil:

Assim,
eu estou meiu ocupada… e por isso demoro para responder…

Tipo, seria interessante o seu servidor reconhecer alguns comandos…
Ativar, Iniciar, Executar… que denomina Serviços.

Você abre seu servidor e coloca ele em espera.

Quando você abrir seu cliente, mande uma constante “ATIVAR”, assim o servidor ira reconhecer…

Faça o teste utilizando seu client e o telnet… assim o telnet seria o seu “servidor” para testar a comunicação… (Crie um ClientSimulator)… para não precisar de um servidor…
faça seu client receber uma porta… e conecte ela atraves do telnet.

no prompt de comandos: telnet ip port

dai só trafegar informações.

[quote=lina]Assim,
eu estou meiu ocupada… e por isso demoro para responder…

Tipo, seria interessante o seu servidor reconhecer alguns comandos…
Ativar, Iniciar, Executar… que denomina Serviços.

Você abre seu servidor e coloca ele em espera.

Quando você abrir seu cliente, mande uma constante “ATIVAR”, assim o servidor ira reconhecer…

Faça o teste utilizando seu client e o telnet… assim o telnet seria o seu “servidor” para testar a comunicação… (Crie um ClientSimulator)… para não precisar de um servidor…
faça seu client receber uma porta… e conecte ela atraves do telnet.

no prompt de comandos: telnet ip port

dai só trafegar informações.[/quote]

hm…entendi Lina

mto obrigado pela ajuda…eu mudei a ordem de algumas coisas aqui e funcionou…vou fazer o teste com telnet agora :smiley:

[]'s

Você esta fazendo um chatzinho?!

Opa!
davidpadilha se vc analizar o seu codigo, vera que tudo vai bem ate que o client tenta ler um UTF, na linha 26. Oque ocorre é que a order que vc esta enviando os dados esta invertida, no servidor vc escreve string e int, no cliente vc le uma int e string.
É so inverter.

[]'s