Olá, eu estou desenvolvendo um “interpretador de comandos”, bom, primeiramente eu fiz a classe Server que cria um fica ouvindo a porta 12345 na minha máquina, estão depois eu uma interface de usuário onde eu digitava um comando e ele era recebido pelo servidor, porém modifiquei as classes para que quando eu me conecte eu receba algumas informações do servidor, minhas classes são as seguintes:
Classe MainWindow (janela que recebe os comandos):
`
package ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class MainWindow extends JFrame implements KeyListener{
private static final long serialVersionUID = 1L;
static ArrayList<JLabel> labels = new ArrayList<>();
JTextField comamndLine = new JTextField();
static JPanel log = new JPanel();
private static Socket client;
static boolean conected;
MainWindow(){
conected = conect();
setTitle("Client");
setLayout(new BorderLayout());
log.setLayout(new BoxLayout(log, BoxLayout.Y_AXIS));
log.setBackground(Color.BLACK);
log.setBorder(BorderFactory.createEtchedBorder(Color.GREEN,Color.BLACK));
JScrollPane scroll = new JScrollPane(log);
add(scroll,BorderLayout.CENTER);
comamndLine.addKeyListener(this);
comamndLine.setBorder(BorderFactory.createEtchedBorder(Color.GREEN,Color.BLACK));
comamndLine.setForeground(Color.GREEN);
comamndLine.setBackground(Color.BLACK);
add(comamndLine,BorderLayout.SOUTH);
setSize(new Dimension(500,500));
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[]args){
new Server();
//conected = conect();
new MainWindow();
}
public boolean conect(){
try {
client = new Socket("127.0.0.1",12345);
System.out.println("conectou...");
ObjectInputStream entrada = new ObjectInputStream(client.getInputStream());
String[] data = (String[]) entrada.readObject();
String arc = data[0];
String osName = data[1];
String osVersion = data[2];
String userName = data[3];
String userHome = data[4];
JLabel start = new JLabel("Start conecion with: "+InetAddress.getLocalHost().getHostAddress()+":\n"
+ "systemArc: "+arc+"\n"
+ "osName: "+osName+"\n"
+ "osVersion: "+osVersion+"\n"
+ "userName: "+userName+"\n"
+ "userHome: "+userHome+"\n");
labels.add(start);
log.add(start);
this.validate();
return true;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return false;
}
}
public void keyPressed(KeyEvent evento) {
if(evento.getSource()==comamndLine && evento.getKeyCode()==KeyEvent.VK_ENTER){
final String comando = comamndLine.getText();
JLabel label = new JLabel("Client comand: "+comando);
label.setForeground(Color.GREEN);
comamndLine.setText("");
labels.add(label);
log.add(label);
this.validate();
final boolean resultado = enviarComando(comando);
if(resultado){
JLabel label2 = new JLabel("\tCommand received");
label2.setForeground(Color.GREEN);
labels.add(label2);
log.add(label2);
}else{
JLabel label2 = new JLabel("\tCommand not received");
label2.setForeground(Color.GREEN);
labels.add(label2);
log.add(label2);
}
}
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
public boolean enviarComando(String comando){
try {
//client = new Socket("127.0.0.1",12345);
if(conected){
ObjectOutputStream saida = new ObjectOutputStream(client.getOutputStream());
saida.flush();
saida.writeObject(comando);
saida.close();
}
System.out.println("Conexão encerrada");
return true;
}
catch(Exception e) {
System.out.println("Erro: " + e.getMessage());
return false;
}
}
}
`
Classe Server:
`
package ui;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
public class Server {
private static ServerSocket servidor;
public static void main(String[] args) {
try {
servidor = new ServerSocket(12345);
System.out.println("servidor ouvindo a porta 12345");
while(true) {
Socket cliente = servidor.accept();
ObjectOutputStream saida = new ObjectOutputStream(cliente.getOutputStream());
saida.flush();
final String[] data = {System.getProperty("os.arch"),
System.getProperty("os.name"),
System.getProperty("os.version"),
System.getProperty("user.name"),
System.getProperty("user.home")};
saida.writeObject(data);
saida.close();
// ObjectInputStream entrada = new ObjectInputStream(cliente.getInputStream());
//final String comando = (String) entrada.readObject();
cliente.close();
}
}
catch(Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}
}
`
Era para tudo funcionar corretamente porém este erro é exibido:
`
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at ui.MainWindow.conect(MainWindow.java:64)
at ui.MainWindow.<init>(MainWindow.java:34)
at ui.MainWindow.main(MainWindow.java:60)
`
Alguém sabe me dizer porque que isso acontece?
