::: URGENTE ::: Dúvida em Java

8 respostas
R

Galera,

Fiz a aplicação abaixo e estou com o seguinte problema; Minha aplicação só recebe os dados do servidor, quando o mesmo é fechado, ou seja, quando o servidor é fechado eu recebo as informações, caso contrário eu não as recebo. Como faço para que estas informações cheguem de tempo em tempo, sem que o servidor precise ser fechado???

// EchoClient.java

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Janela extends JFrame
{
  public JTextField tf1;
  public JButton bt1;
  public JLabel lb1;
  public JLabel lb2;
  public Janela()
  {
    super("Client - ATech - STI");
    Container container = getContentPane();
    container.setLayout(new FlowLayout());

    tf1 = new JTextField(10);
    tf1.setText("sti-nb2");

    bt1 = new JButton("OK");
    lb1 = new JLabel("Servidor");
    lb2 = new JLabel("Conectando com o Servidor...");
    bt1.setBounds(new Rectangle(515, 442, 75, 30));
    container.add(lb1);
    container.add(tf1);
    container.add(bt1);
    container.add(lb2);

    setSize(320, 100);
    tf1.setEditable(false);
    setVisible(true);
  }

  public JTextField getTf1()
  {
    return tf1;
  }
}

public class EchoClient
{
  public static void main(String[] args) throws IOException
  {
    BufferedReader in = null;
    Janela j = new Janela();
    // Centraliza a janela na tela
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int w = j.getSize().width;
    int h = j.getSize().height;
    int x = (dim.width-w)/2;
    int y = (dim.height-h)/2;
    j.setLocation(x, y);
    j.setResizable(false);
    j.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });
    j.show();
		while (1 > 0)
		{
      try
      {
        InetAddress addr = InetAddress.getByName("sti-nb2");
        int port = 40;
        SocketAddress sockaddr = new InetSocketAddress(addr, port);
        Socket sock = new Socket();

        int timeoutMs = 60000;   // 1 min
        sock.connect(sockaddr, timeoutMs);
        in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
        j.lb2.setText("      Conectado      ");
        String str;
				while ((str = in.readLine()) != null)
        {
					str = in.readLine();
          JOptionPane.showMessageDialog(null, str, "Atençao", JOptionPane.INFORMATION_MESSAGE);
        }
        in.close();
        sock.close();
        j.lb2.setText("     Desconectado     ");
      }
      catch (UnknownHostException e)
      {
        JOptionPane.showMessageDialog(null, "Host desconhecido.", "Erro", JOptionPane.ERROR_MESSAGE);
        //System.exit(1);
      }
      catch (IOException e)
      {
        JOptionPane.showMessageDialog(null, "Host de destino inacessivel.", "Erro", JOptionPane.ERROR_MESSAGE);
        //System.exit(1);
      }
    }
  }
}

8 Respostas

J

Oi

rvsantos, ainda não testei teu código pq estou um tanto ocupado agora, mas pelo o que eu entendi se o teu servidor não tiver um recurso para lhe enviar estas informações de tempo em tempo tu terá que usar Threads no teu programa.

Assim que der vou testar o código…

T+

eltonk

teu programa entra em looping se o host não é encontrado hehehehe :lol:

C

opa…
Coloca o codigo do server… provavelmente vc tem q colocar o dataOutput.flush();
Q fará q os dados sejam enviados no momento… sem isso, os dados apenas serao enviados quando houver um tamanho “bom” para o pacote ser enviado pelo SO.
Com o flush() vc manda o SO enviar os dados na hora!
Posso naum ter entendido o seu problema… mas acho q é isso!!

Falow!!

R

“clv”:
opa…
Coloca o codigo do server… provavelmente vc tem q colocar o dataOutput.flush();
Q fará q os dados sejam enviados no momento… sem isso, os dados apenas serao enviados quando houver um tamanho “bom” para o pacote ser enviado pelo SO.
Com o flush() vc manda o SO enviar os dados na hora!
Posso naum ter entendido o seu problema… mas acho q é isso!!

Falow!!

Caro amigo,

Desculpe minha ignorância, mas é que estou começando em programação JAVA e não sei quase nada. A propósito, onde eu tenho que inserir esta linha??? :oops:

R

Caro amigo,

Sem problema algum… não sei o motivo do riso… O loop foi feito para ficar rodando mesmo quando o host não é encontrado, pois assim poderei ver que os server está fechado.

R

“jeveaux”:
Oi

rvsantos, ainda não testei teu código pq estou um tanto ocupado agora, mas pelo o que eu entendi se o teu servidor não tiver um recurso para lhe enviar estas informações de tempo em tempo tu terá que usar Threads no teu programa.

Assim que der vou testar o código…

T+

Caro amigo,

Desde já agradeço pela atenção… Se puder me dar uma ajuda eu agradeço muito, pois sou iniciante em JAVA e não entendo quase nada, e ainda por cima, tenho que entregar este projeto a semana que vem… :oops:

M

semana q vem!?? A 4ª edição dos Deitel&Deitel tem um prontinho!!! hehehe :smiley:

eltonk

Caro amigo,

Sem problema algum… não sei o motivo do riso… O loop foi feito para ficar rodando mesmo quando o host não é encontrado, pois assim poderei ver que os server está fechado.

Foi baianagem minha… o server está configurado no fonte… e caso o server nao eh encontrado ele fica testando o caminho…
vi isso soh dpois que postei a msg… nao estava tirando de ninguem… :roll:
mas enquanto o programa está nesse looping, nao para de vim msg`s

Criado 3 de fevereiro de 2004
Ultima resposta 5 de fev. de 2004
Respostas 8
Participantes 5