在启用函数中进行Java Socket编程
问题描述:
我是使用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);
}
答
使用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);
}
答
ÿ你可以尝试让另一个进程绑定到同一个端口。
的TCPView(仅Windows)从Windows Sysinternals的是我最喜欢的应用程序时,我有一个JVM_BIND错误。它显示哪些进程正在监听哪个端口。它还提供了一个方便的上下文菜单,以杀死进程或关闭正在进行的连接。
+0
有趣..现在我在客户端上的ObjectInputStream线上得到EOFexception I = new ObjectInputStream(socket.getInputStream()); – unclass123
没有骰子。我仍然遇到同样的错误。它似乎不喜欢我在开始方法中这样做。我不知道还有什么可以做的。 – unclass123
我感谢你有另一个进程绑定到同一个端口。 – Shomu