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();
乗り越えるないということである: はここに私のコードです。
ノートパソコンで同じコードを実行し、ローカルホストからクライアントとして接続しても問題ないことに注意してください。 ルータのポート転送を確認しました。指定されたポートは開いています。
何が問題なのですか?どのようにそれを修正するための任意のアイデア? ご協力いただければ幸いです。
あなたは、ファイアウォールがあなたのLinuxマシン上で実行されているかどうかを確認する必要があります。 'service iptables stop'をrootとして実行して、サーバのテスト中は無効にしてください。それでも問題が解決しない場合は、サーバマシン上でwireshark/tcpdumpを実行してネットワークをデバッグする必要があります。クライアント接続がLinuxサーバに到達したことを100%確認してください(つまり、ポート転送は正常に動作しています) – nos
'firewall-cmd --zone = public --add-port = 3333/tcp --permanent'を使用して、ポートをファイアウォールに追加しました。 –
その後、tcpdumpでネットワークのデバッグを開始する必要があります。 localhostからサーバをテストするとサーバは機能しますか?同じローカルネットワーク上の別のホストからテストしても問題はありませんか? (あなたは両方をtelnetでテストすることができます)ファイアウォールをentierlyで無効にすると動作しますか(それはテストに非常に短い時間がかかります。 。要点は、サーバコード(別のマシンで動作すると言いますので、うまく動作します)、サーバマシン、ルータ、クライアントのいずれかに問題を絞り込む必要があります。 – nos