Aplicação de Chat JAVA não funciona na internet

Criei um aplicativo de chat em Java que funciona quando abro o servidor e os clientes em terminais diferentes, mas no mesmo computador. Hoje eu dei a meu amigo para testá-lo através da internet e não está funcionando(conexão cronometrada ,sim eu estou usando muiltithreads). Eu permiti port (estou usando 4242) na minha firewall e meus amigos. Mas ainda não funciona.

Eu li algumas perguntas similares feitas na internet, mas cada uma tem diferentes passos (nenhum funciona) e também não estou recebendo todos os passos embora.

alguns disseram que o router está a esconder o meu endereço ip, por isso preciso de activar o reencaminhamento de portas (não sei como) . Também deve haver uma maneira de não o fazer. Muitos softwares funcionam assim, mas não precisam de nós para permitir o encaminhamento de portas. Will using a mobile hotspot instead of modem work (I am so DUMB!).

Eu sou noob nesta área, estudei redes em JAVA ontem e fiz app ontem à noite. Ajude-me a correr o meu aplicativo pela internet em linguagem simples. Será gratuita se funcionar sem Porto encaminhamento e endereço IP estático. Avisa-me se precisares de ver o meu código.

Lado Do Servidor:

   import java.io.*;
import java.net.*;
import java.util.*;

class DailyAdviceS
{
    ArrayList<PrintWriter> Clients=new ArrayList<PrintWriter>();
    Socket sock;
    public static void main(String args[])
    {
        DailyAdviceS ad= new DailyAdviceS();
        ad.go();
    }
    private void go()
    {
        try
        {
            ServerSocket server= new ServerSocket(4242);
            InetAddress ip;
            ip = InetAddress.getLocalHost();
            System.out.println("Current IP address : " + ip.getHostAddress());
            while(true)
            {
                sock=server.accept();
                PrintWriter writer = new PrintWriter(sock.getOutputStream());
                Clients.add(writer);
                Thread foundR= new Thread(new nodeR(sock));
                foundR.start();
                System.out.println("got a connection");
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    private void SendAll(String Chat,String name)
    {
        Iterator it=Clients.iterator();
        while(it.hasNext())
        {
            try
            {
                PrintWriter writer= (PrintWriter)it.next();
                writer.println(name+" /t "+Chat);
                writer.flush();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    class nodeR implements Runnable                     //recieve message from clients
    {
        private String hostName; 
        private BufferedReader reader;
        public nodeR(Socket s)
        {
            try
            {
                String hostName = s.getInetAddress().getHostName();
                System.out.println(hostName);
                InputStreamReader in= new InputStreamReader(s.getInputStream());
                reader = new BufferedReader(in);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        public void run()
        {
            String Message;
            try
            {
                String Name=InetAddress.getLocalHost().getCanonicalHostName();  
                SendAll(Name+" Ready","");
                while(true)
                {
                    while ((Message=reader.readLine())!=null) 
                    {
                        SendAll(Message,Name);
                    }
                }

            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

Lado Do Cliente:

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

class DailyAdvice
{
    private JTextArea ar= new JTextArea(100,100);
    private JTextField field = new JTextField(17);
    private JButton button;
    private Socket chat;
    private InputStreamReader stream;
    private BufferedReader reader;
    private PrintWriter writer;

    public static void main(String args[])
    {
        DailyAdvice ad= new DailyAdvice();
        ad.setnw();
        ad.go();

        }
    private void go()
    {
        JFrame frame= new JFrame("Chat with RedHead");
        JPanel panel= new JPanel();
        ar.setLineWrap(true);
        ar.setWrapStyleWord(true);
        ar.setEditable(false);
        JScrollPane scroll= new JScrollPane(ar);
        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        panel.add(field);

        DefaultCaret caret = (DefaultCaret) ar.getCaret();
        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

        button= new JButton("Send");
        panel.add(button);
        frame.getRootPane().setDefaultButton(button);
        frame.add(scroll,BorderLayout.CENTER);
        frame.add(panel,BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setBounds(50,50,300,300);
        frame.setVisible(true);
        Runnable r= new Recieve();
        Thread send= new Thread(new Send());
        Thread recieve= new Thread(r);
        send.start();
        recieve.start();

    }
    private void setnw()
    {
        try
        {
            chat = new Socket("122.176.8.153",4242);
            stream= new InputStreamReader(chat.getInputStream());
            reader= new BufferedReader(stream);
            writer = new PrintWriter(chat.getOutputStream());
            System.out.println("connection established");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
    class Send implements Runnable
    {
        public void run()
        {
            button.addActionListener(new timetosend());

        }
        class timetosend implements ActionListener
        {
            public void actionPerformed(ActionEvent ev)
            {
                try
                {
                    String msg =field.getText();
                    writer.println(msg);
                    writer.flush();
                }
                catch (Exception ex)
                {
                    ex.printStackTrace();
                }
                field.setText("");
            }
        }
    }
    class Recieve implements Runnable
    {
        public void run()
        {
            try
            {
                String input;
                while ((input= reader.readLine())!=null)
                {
                    String[] result=input.split("/t");
                    ar.append(result[0]+" : "+result[1]+'\n');
                }
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
    }
}
Author: lcukerd, 2016-11-03

1 answers

Certifique-se que a sua aplicação não está a usar o IP privado para se ligar ao seu servidor se aceder através da internet. você pode verificar o IP público do seu PC a partir do site abaixo, que é atualmente atribuído ao seu PC, e pode usá-lo em aplicativos do seu cliente.
Além disso, certifique-se de ter configurado a porta no encaminhamento de portas no seu switch/router e se não for permitido pelo seu ISP, poderá usar qualquer software de encaminhamento de portas no seu PC para fazer que.

Http://www.get-myip.com/

 0
Author: Umais Gillani, 2016-11-03 08:06:05