2016-09-27 10 views
0

LinuxマシンでCentOS 7を実行しているサーバーがあります。 マシンでは、サーバーへのクライアント接続を管理するコードを実行します。ソケットを介してLinuxマシンに接続することができません

public class ServerMain_mng { 
final static int nPort = 3333; 

public static void main(String[] args) throws IOException { 
    new ServerMain_mng(); 
} 

public ServerMain_mng(){ 
    try { 
     ServerSocket sSocket = new ServerSocket(3333); 
     System.out.println("Server started at: " + new Date()); 
     System.out.println("===============================================\n"); 

     while(true) { 
      System.out.println("waiting for connection"); 
      //Wait for a client to connect 
      Socket socket = sSocket.accept(); 
      socket.setSoTimeout(30000); 
      //Create a new custom thread to handle the connection 
      ClientThread cT = new ClientThread(socket, nPort); 
      //Start the thread! 
      new Thread(cT).start(); 
     } 
    } 
    catch(IOException ex) {ex.printStackTrace();} 
}} 

問題は、クライアントがサーバーに接続しようとすると、コードが行Socket socket = sSocket.accept();乗り越えるないということである: はここに私のコードです。

ノートパソコンで同じコードを実行し、ローカルホストからクライアントとして接続しても問題ないことに注意してください。 ルータのポート転送を確認しました。指定されたポートは開いています。

何が問題なのですか?どのようにそれを修正するための任意のアイデア? ご協力いただければ幸いです。

+0

あなたは、ファイアウォールがあなたのLinuxマシン上で実行されているかどうかを確認する必要があります。 'service iptables stop'をrootとして実行して、サーバのテスト中は無効にしてください。それでも問題が解決しない場合は、サーバマシン上でwireshark/tcpdumpを実行してネットワークをデバッグする必要があります。クライアント接続がLinuxサーバに到達したことを100%確認してください(つまり、ポート転送は正常に動作しています) – nos

+0

'firewall-cmd --zone = public --add-port = 3333/tcp --permanent'を使用して、ポートをファイアウォールに追加しました。 –

+0

その後、tcpdumpでネットワークのデバッグを開始する必要があります。 localhostからサーバをテストするとサーバは機能しますか?同じローカルネットワーク上の別のホストからテストしても問題はありませんか? (あなたは両方をtelnetでテストすることができます)ファイアウォールをentierlyで無効にすると動作しますか(それはテストに非常に短い時間がかかります。 。要点は、サーバコード(別のマシンで動作すると言いますので、うまく動作します)、サーバマシン、ルータ、クライアントのいずれかに問題を絞り込む必要があります。 – nos

答えて

0

sSocket.accept()はブロッキング呼び出しで、一部のクライアントがリスンしているポートと同じポートを使用して接続するまでブロックされたままになっています。サーバーで

public class Client { 
     final static int nPort = 3333; 
     public static void main(String[] args) throws IOException { 
     Socket sock=new Socket(IP of Server, nPort) 
     System.out.println("connected to: +sock.getRemoteSocketAddress()) 
     //send additional data needed for the server using the socket's outputputStream 
      } 
      } 

ClientThread cT = new ClientThread(socket); 
    //Start the thread! 
    new Thread(cT).start(); 
+0

私はそれを知っています。私はそれを指定されたポートで接続しようとしていますが、何も起こっていません。私が述べたように、私のラップトップでは正常に動作します。 –

+0

クライアントコードはありますか? –

+0

はい。 ClientThread?もしそれが決してその点に到達しなければ、あなたを助けるでしょうか? –

関連する問題