2017-09-09 9 views
0

ここでは単純なサーバープログラムのコードです。クライアントが接続しようとしていても、接続しようとしているクライアントがいなくてもpersonオブジェクトが作成されます。 P.S. printStackTrace()をどのようにして、2番目のcatchステートメント(whileループ内)でサーバーの行のコメントを外すと、スタックトレースとは対照的に、赤い書き込みを取得します。ループ中にサーバープログラムがループしていた

'import java.net.ServerSocket; 
import java.net.Socket; 


public class Test { 

    ServerSocket ss; 
    int id; 

    public Test(int portNo){ 

     id = 0; 
     Listen(portNo); 
    } 

    private void Listen(int portNo){ 

     try{ 
      ss = new ServerSocket(portNo); 
     } 
     catch(Exception e){ 
      System.out.println(e.getMessage());  
     } 

     while(true){ 
      try{ 
       id++; 
       new Thread(new Person(ss.accept(),id)).start(); 
      } 
      catch(Exception e){ 
       System.out.println("2 " + e.getMessage()); 
       //e.printStackTrace(); 
      } 
     } 
    } 

} 

私がこれを実行するときはいつも、エラー「2ヌル」が繰り返されます。

Personクラス:

import java.net.Socket; 


    public class Person implements Runnable{ 

     int id; 

     public Person(Socket s, int id){ 

      this.id = id; 
     } 

     public void run(){ 

      System.out.println(id + " Connected to server"); 

     } 

    } 

クライアントコード:

import java.net.InetAddress; 
import java.net.Socket; 
import java.util.Scanner; 


public class test1{ 

    String serverIp; 
    Boolean connected; 
    InetAddress IP; 
    Socket clientSocket; 
    Integer clientID; 
    int ssPortNo; 

    public test1(){ 
     System.out.println("Enter IP : "); 
     Scanner sc = new Scanner(System.in); 
     String ip = sc.next(); 
     System.out.println("Enter port : "); 
     String port = sc.next(); 
     setupConnection(ip, port); 
    } 




    private void setupConnection(String serverIP, String port) { 
     int portInt = Integer.parseInt(port); 
     serverIp = serverIP; 
     try { 
      connected = true; 
      IP = InetAddress.getByName(serverIP); 
      clientSocket = new Socket(serverIP, portInt); 
      System.out.println("Connecting"); 
     } 
     catch(Exception e){ 
      System.out.println("1 " + e.getMessage()); 
     } 
    } 
} 
+0

エラーを投稿できますか?接続するクライアントを使わずにサーバーを実行しようとしましたが、正常に動作します... –

+0

e.getMesageを使用すると「null」が表示されます。 –

+0

私は上記のコードもチェックしました。何のエラーもありません。だから、クライアントのコードを投稿してください。 – Vijay

答えて

0

問題は例外がある場合は、何もしないということです。

私がこれを実行するときはいつも、エラー「2ヌル」が繰り返されます。

これは、特定のポートをリッスンし、同じポートでサーバーを実行しているサーバーが既に存在するからだと思います。この場合、例外がスローされます(アドレスはすでに使用中です)。迅速に検証するには、サーバーが待機するポートを変更しようとします。

EDIT

私はいくつかの理由でのServerSocketがNULLであることだと思います。これをサーバーに追加して出力を表示できますか?

if(ss!=null){ 
     while(true){ 
      Socket socket = null; 
      try{ 
       id++; 
       System.out.println("Server wait at 9094"); 
       socket = ss.accept(); 
       new Thread(new Person(socket,id)).start(); 
       socket.close(); 
      } 
      catch(Exception e){ 
       System.out.println("2 " + e); 
      } 

     } 
    } 
     else 
     { 
      System.out.print("the ServerSocket is NULL"); 
     } 
+0

私はポートを変更しようとしましたが、私はまだ 'null'を取得します。 –

+1

私はあなたが編集でやったことを試してみました。つまり、出力はサーバーに接続されており、サーバーには2が接続されています。 –

関連する問題