Galera,
Estou com o seguinte problema: Tenho uma aplicação Server em Delphi que fica rodando em um servidor aguardando a comunicação de outras aplicações Client’s. Ocorre que agora preciso criar um Client em Java para se comunicar com este Server Delphi. Já havia feito esta aplicação Client utilizando Sockets (segue código) que faz essa comunicação mas só consigo receber o pacote de informações quando eu fecho o meu Server Delphi, ou seja, enquanto o Server está aberto eu não recebo nenhuma informação, apenas fico conectado a ela, mas quando eu fecho o Server Delphi as informações chegam no Client Java. O problema é que alguns mestres em java me disseram que Sockets costuma dar dor de cabeça. Então preciso da opinião de vc’s para saber o que fazer. Corrigo esta aplicação que já está criada e só falta fazê-la receber as informações enquanto o Server estiver rodando ou tento fazer uma outra utilizando RMI? Por favor me ajudem… se alguém tiver algum código de exemplo eu agradeço…
Obs.: Sou iniciante em Java e não tenho muitos conhecimentos.
// 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");
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);
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.out.print("close");
System.exit(0);
}
});
j.show();
try
{
InetAddress addr = InetAddress.getByName("sti-nb2");
int port = 40;
SocketAddress sockaddr = new InetSocketAddress(addr, port);
// Create an unbound socket
Socket sock = new Socket();
// This method will block no more than timeoutMs.
// If the timeout occurs, SocketTimeoutException is thrown.
int timeoutMs = 60000; // 1 min
sock.connect(sockaddr, timeoutMs);
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
}
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);
}
String str;
j.lb2.setText(" Conectado ");
while ((str = in.readLine()) != null)
{
j.lb2.setText(str);
JOptionPane.showMessageDialog(null, str, "Atençao", JOptionPane.INFORMATION_MESSAGE);
}
in.close();
j.lb2.setText(" Desconectado ");
}
}