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 java.net.*;
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 java.net.;
import static javax.swing.JOptionPane.;
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
}