2016-11-03 12 views
0

Javaでチャットアプリを作成しましたが、サーバーとクライアントを別の端末で開いていても同じコンピューターで動作しました。今日私はインターネット上でそれをテストするために私の友人にそれを与えた(接続がタイムアウトした、はい、私はmuiltithreadsを使用しています)。私はファイアウォールと私の友人のポート(私は4242を使用しています)を許可しました。しかし、まだ動作していません。JAVAチャットアプリがインターネット上で動作しない

私はインターネットで尋ねられる似たような質問をいくつか読んだことがありますが、それぞれのステップは異なります(動作していません)。

ルータによって私のIPアドレスが隠されているので、ポート転送を有効にする必要があると言われています。それがなければ方法がなければならない。多くのソフトウェアはこのように動作しますが、ポート転送を有効にする必要はありません。モデムの仕事の代わりにモバイルのホットスポットを使用しますか(私はとてもダブです!)。

私はこの分野でnoobです、昨日のJavaでネットワークを勉強し、昨日の夜にアプリを作った。私は簡単な言葉でインターネット上で私のアプリを実行するのに役立ちます。ポートフォワーディングと静的IPアドレスなしで動作する場合、gratefullになります。私のコードを見る必要があるかどうかを教えてください。

サーバー側:

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(); 
      } 
     } 
    } 
} 

クライアント側:

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(); 
      } 
     } 
    } 
} 
+0

コードをご記入ください。 –

+0

大丈夫待ってpls! – lcukerd

+0

ほとんどのISPは固定IP上でのみ開かれたポートを許可しているため(モバイルの場合)、モバイルホットスポットはサーバとして機能しない可能性があります。 –

答えて

0

アプリケーションがインターネット上でアクセスした場合、サーバーに接続するためにプライベートIPを使用していないことを確認してください。あなたのPCに現在割り当てられている下のサイトからあなたのPCのパブリックIPをチェックして、あなたのクライアントアプリでこれを使うことができます。
また、スイッチ/ルータのポート転送でポートを設定していることを確認してください。ISPから許可されていない場合は、PC上の任意のポート転送ソフトウェアを使用してください。

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

+0

はい私はPCのパブリックIPアドレスを使用しています – lcukerd

関連する問題