2017-11-18 160 views
0

我是使用JavaFx及其功能的新手。我正在創建一個由本地連接播放的2人跳棋遊戲。我知道在JavaFX中,你不需要主類,因爲start函數的@Override基本上是你的主類。現在我的連接試圖在該啓動函數中進行,但每次嘗試時它都會繼續吐出java.net.BindException和java.lang.RuntimeException。我看着我的端口,它沒有被使用。我評論了代碼的連接部分,並且該應用程序能夠運行。你是否無法連接啓動功能?在啓用函數中進行Java Socket編程

客戶端代碼:

@Override 
    public void start(Stage primaryStage) throws Exception, ClassNotFoundException, IOException,UnknownHostException { 
     Scene scene1 = new Scene(createContent()); 
     primaryStage.setTitle("Client Side"); 
     primaryStage.setScene(scene1); 
     primaryStage.show(); 

     socket = new Socket("127.0.0.1",1337); 

     boolean end = false; 
     boolean turn = true; 
     Serializable ObjectInputStream; 
     ObjectInputStream I = new ObjectInputStream(socket.getInputStream()); 
     Serializable ObjectOutputStream; 
     ObjectOutputStream o = new ObjectOutputStream(socket.getOutputStream()); 
     Scanner scan = new Scanner(socket.getInputStream()); 
     PrintStream p = new PrintStream(socket.getOutputStream()); 
     do 
     { 


     while(turn == true) 
      { 
       temp1 = scan.nextInt(); 
       temp2 = scan.nextInt(); 
       Checker check = (Checker) I.readObject(); 
       check.relocate(temp1, temp2); 
       turn = false; 
      } 
      while(turn == false) 
      { 

       p.println(sendX); 
       p.println(sendY); 
       o.writeObject(sendO); 
       turn = true; 


      } 


     }while(end == false); 

    } 

服務器代碼剛好相反的是:

@Override 
    public void start(Stage primaryStage) throws Exception, 
    ClassNotFoundException, IOException,UnknownHostException { 
    Scene scene = new Scene(createContent()); 
    primaryStage.setTitle("Server Side"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    serverSocket = new ServerSocket(1337); 
    Socket socket = serverSocket.accept(); 
    boolean end = false; 
    boolean turn = true; 
    Serializable ObjectInputStream; 
    Serializable ObjectOutputStream; 
    ObjectInputStream I = new ObjectInputStream(socket.getInputStream()); 
    ObjectOutputStream o = new ObjectOutputStream(socket.getOutputStream()); 
    Scanner scan = new Scanner(socket.getInputStream()); 
    PrintStream p = new PrintStream(socket.getOutputStream()); 
    do 
    { 


    while(turn == true) 
     { 
     p.println(sendX); 
     p.println(sendY); 
     o.writeObject(sendO); 
     turn = false; 
     } 
     while(turn == false) 
     { 


     temp1 = scan.nextInt(); 
     temp2 = scan.nextInt(); 
     Checker check = (Checker) I.readObject(); 
     check.relocate(temp1, temp2); 
     turn = true; 

     } 


    }while(end == false); 

    } 

回答

0

使用try catch塊

try { 
     serverSocket = new ServerSocket(1337); 
     Socket socket = serverSocket.accept(); 
    } 
    catch (IOException e) { 
     System.out.println(e); 
    } 

    boolean end = false; 
    boolean turn = true; 
    Serializable ObjectInputStream; 
    Serializable ObjectOutputStream; 
    ObjectInputStream I = new ObjectInputStream(socket.getInputStream()); 
    ObjectOutputStream o = new ObjectOutputStream(socket.getOutputStream()); 
    Scanner scan = new Scanner(socket.getInputStream()); 
    PrintStream p = new PrintStream(socket.getOutputStream()); 
    do 
    { 


    while(turn == true) 
    { 
    p.println(sendX); 
    p.println(sendY); 
    o.writeObject(sendO); 
    turn = false; 
    } 
    while(turn == false) 
    { 


    temp1 = scan.nextInt(); 
    temp2 = scan.nextInt(); 
    Checker check = (Checker) I.readObject(); 
    check.relocate(temp1, temp2); 
    turn = true; 

    } 


    }while(end == false); 

    } 
+0

沒有骰子。我仍然遇到同樣的錯誤。它似乎不喜歡我在開始方法中這樣做。我不知道還有什麼可以做的。 – unclass123

+0

我感謝你有另一個進程綁定到同一個端口。 – Shomu

0

ÿ你可以嘗試讓另一個進程綁定到同一個端口。

的TCPView(僅Windows)從Windows Sysinternals的是我最喜歡的應用程序時,我有一個JVM_BIND錯誤。它顯示哪些進程正在監聽哪個端口。它還提供了一個方便的上下文菜單,以殺死進程或關閉正在進行的連接。

+0

有趣..現在我在客戶端上的ObjectInputStream線上得到EOFexception I = new ObjectInputStream(socket.getInputStream()); – unclass123