2017-11-18 140 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