Sockets

6 respostas
marciofermino

Amigos consegui rodar meu socket.
Então estou conseguindo enviar uma string do servidor para o cliente

Servidor
import java.lang.*;
import java.io.*;
import java.net.*;

class Server {
   public static void main(String args[]) {
      String data = "Mensagem teste servidor marcio >>>>";
      try {
         ServerSocket srvr = new ServerSocket(9000);
         Socket skt = srvr.accept();
         System.out.print("Servidor Conectado!\n");
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Enviando mensagem: '" + data + "'\n");
         out.print(data);
         out.close();
         skt.close();
         srvr.close();
      }
      catch(Exception e) {
         System.out.print("Erro Servidor");
      }
   }
}
Cliente
import java.lang.*;
import java.io.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
        Socket skt = new Socket("localhost", 9000);
        
         BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
         System.out.print("Mensagem recebida: '");

         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("'\n");
         in.close();
      }
      catch(Exception e) {
         System.out.print("Erro cliente \n");
      }
   }
}

Agora a dúvida.
Nesse meu exemplo as string foi passada através da classe Servidor.

No meu cenário real, existe um aparelho que esta na rua enviando mensagens para meu IP Fixo + Porta.

Como ficaria minha classe servidor ?

Obrigado.

6 Respostas

charleston10

de uma olhada
http://javaaberto.blogspot.com.br/2012/12/sockets.html

marciofermino

Amigo fiz exatamente como no exemplo.

só que não estou sabendo como pegar o que esta na porta

Servidor

import java.io.*;
import java.net.*;

public class servidor {
	private ServerSocket server;
	private Socket socket;
	private InputStream entrada;
	private BufferedReader read;

	public servidor() {
		try {
			server = new ServerSocket(9000);
			System.out.println("Servidor aguardando conexao.");
			socket = server.accept();
			entrada = socket.getInputStream();
			read = new BufferedReader(new InputStreamReader(entrada));
			System.out.println(read.readLine());
			read.close();
			socket.close();
			server.close();

		} catch (IOException ex) {
			ex.printStackTrace();
		}

	}

	public static void main(String[] args) {
		// Chama o método construtor na classe
		new servidor();
	}
}
Cliente
import java.io.*;
import java.net.*;

public class cliente {
	public cliente() {

	}

	public static void main(String[] args) {
		try {
			Socket socket = new Socket("127.0.0.1", 9000);
			OutputStream saida = socket.getOutputStream();
			PrintStream escrita = new PrintStream(saida);

			if (args.length > 0) {
				escrita.println(args[0]);
			} else {
				escrita.println("Alucard");
			}
		} catch (UnknownHostException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}
o retorno
Servidor aguardando conexao.
Alucard
ViniGodoy

Você precisa conhecer o protocolo do aparelho e, em se tratando de um hardware, há altas chances dele ser binário. Leia:

marciofermino

Amigos olha
na verdade o codigo esta fazendo o que quero mas precisa ser ao contrario
por exemplo.

esse cara aqui
class Server {
   public static void main(String args[]) {
      String data = "Mensagem teste servidor marcio >>>>";
      try {
         ServerSocket srvr = new ServerSocket(9000);
         Socket skt = srvr.accept();
         System.out.print("Servidor Conectado!\n");
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Enviando mensagem: '" + data + "'\n");
         out.print(data);
         out.close();
         skt.close();
         srvr.close();
         
         
      }
      catch(Exception e) {
         System.out.print("Erro Servidor");
      }
   }
}

Enviou uma mensagem para esse outro cara

import java.lang.*;
import java.io.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
        Socket skt = new Socket("localhost", 9000);
        
         BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
         System.out.print("Mensagem recebida: '");

         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("'\n");
         in.close();
      }
      catch(Exception e) {
         System.out.print("Erro cliente \n");
      }
   }
}

Em meu cenário é ao contrario
o primeiro codigo é quem esta enviando as mensagens não é ?

no meu caso quem esta enviando as mensagens é o aparelho

forum é óitimo mas para me expressar as vezes tenho dificuldade

marciofermino
nao teria que ter um input ao inves de output ?
String data = "Mensagem teste servidor marcio >>>>";
      try {
         ServerSocket srvr = new ServerSocket(9000);
         Socket skt = srvr.accept();
         System.out.print("Servidor Conectado!\n");
         
         
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         
        [b] InputStream input = skt.getInputStream();[/b]
marciofermino

eu rodei e retornou isso

---->java.net.SocketInputStream@7d2a1e44
Criado 19 de abril de 2013
Ultima resposta 19 de abr. de 2013
Respostas 6
Participantes 3