Como faço para conectar sockets em rede externa

0 respostas
javaprogramação
M

Amigos, estou com uma certa dificuldade em conectar um chat desenvolvido usando sockets em uma rede externa, para que os usuarios não precisem estar em uma rede local.
segue abaixo o código utilizado.

CODIGO DO SERVIDOR

package servidor;

import <a href="http://java.net">java.net</a>.*;

import java.io.IOException;

import java.io.PrintStream;

import java.util.ArrayList;

public class Servidor {

public static void main(String[] args){
   
    ArrayList<PrintStream> clientes = new ArrayList<>();
    
    try{
  ServerSocket server = new ServerSocket(5000);
    Socket socket;
       
    while(true){
    
        socket = server.accept();
        
        
        clientes.add(new PrintStream (socket.getOutputStream()));
        Mensagem mensagem = new Mensagem(socket, clientes);
        
    
        }    
    }
    catch(IOException e){
        e.printStackTrace();
    }

}

}

CODIGO DO CLIENTE

package Cliente;

import java.awt.event.KeyEvent;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintStream;

import <a href="http://java.net">java.net</a>.<em>;

import static javax.swing.JOptionPane.</em>;

public class Chat extends javax.swing.JFrame {
private String nome;
private Socket s;
private BufferedReader br;
private InputStreamReader isr;

public Chat(String nome) {
    
    initComponents();
    
    this.nome = nome;
    try{
        s = new Socket("localhost",5000);
    }
    catch(IOException e){
        showMessageDialog(null, "Não se Conectou ao servidor","",ERROR_MESSAGE);
        System.exit(0);
    }
    Thread();
}
private void Thread(){
    
    Thread t = new Thread(new Runnable() {
    
       String mensagem; 
        
    @Override
    public void run() {
        
        try{
        isr = new InputStreamReader(s.getInputStream());
        br = new BufferedReader(isr);
        
        while((mensagem = br.readLine()) != null){
            
            mensagemRecebida.setText(mensagemRecebida.getText()+ mensagem + "\n");
            
        }
        
        }
        catch(IOException e){
            
            showMessageDialog(null, "Erro na conexão com o servidor", "", ERROR_MESSAGE);
            
        }
         }    
    });
t.start();

}

@SuppressWarnings(unchecked)

// //GEN-BEGIN:initComponents

private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
    mensagemRecebida = new javax.swing.JTextArea();
    jScrollPane2 = new javax.swing.JScrollPane();
    mensagemEnviada = new javax.swing.JTextArea();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    mensagemRecebida.setColumns(20);
    mensagemRecebida.setRows(5);
    jScrollPane1.setViewportView(mensagemRecebida);

    mensagemEnviada.setColumns(20);
    mensagemEnviada.setRows(5);
    mensagemEnviada.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            mensagemEnviadaKeyPressed(evt);
        }
    });
    jScrollPane2.setViewportView(mensagemEnviada);

    jButton1.setText("Enviar");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                .addComponent(jScrollPane1)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(jButton1)))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jScrollPane2)
                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
   
    String mensagem = nome + " disse: ";
   
    try{
   PrintStream ps = new PrintStream(s.getOutputStream());
   mensagem += mensagemEnviada.getText();
   
   ps.println(mensagem);
   ps.flush();
   
   mensagemEnviada.setText("");
   }
   catch(IOException e){
        showMessageDialog(null, "Não conseguiu enviar a mensagem","",ERROR_MESSAGE);
   }
   
}//GEN-LAST:event_jButton1ActionPerformed

private void mensagemEnviadaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_mensagemEnviadaKeyPressed
   
    if(evt.getKeyCode() == KeyEvent.VK_ENTER){
        
        String mensagem = nome + " disse: ";
   
    try{
   PrintStream ps = new PrintStream(s.getOutputStream());
   mensagem += mensagemEnviada.getText();
   
   ps.println(mensagem);
   ps.flush();
   
   mensagemEnviada.setText("");
   }
   catch(IOException e){
        showMessageDialog(null, "Não conseguiu enviar a mensagem","",ERROR_MESSAGE);
   }
    }
    
}//GEN-LAST:event_mensagemEnviadaKeyPressed

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea mensagemEnviada;
private javax.swing.JTextArea mensagemRecebida;
// End of variables declaration//GEN-END:variables

}

Criado 11 de maio de 2020
Respostas 0
Participantes 1