Error:
[!] Server waiting.
Cannot invoke "task2.SerializableRectangle.getX()" because "this.m_rectangle" is null
Rectangle (Object) (10.0,10.0,200.0,200.0).
Exception in thread "Server Thread" java.lang.RuntimeException: java.net.BindException: Address already in use: bind
at task2.Server.run(Server.java:30)
at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:555)
at java.base/sun.nio.ch.Net.bind(Net.java:544)
at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:629)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:393)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:275)
at java.base/java.net.ServerSocket.<init>(ServerSocket.java:168)
at task2.Server.run(Server.java:17)
... 1 more
Objective:
I am trying to have a Server with JavaFx
running and then send an serialized description for a Graphics
object and have the Server draw it on JavaFx
Canvas.
Server.java:
public class Server implements Runnable {
private SerializableRectangle m_rectangle = null;
@Override
public void run() {
ServerSocket server = null;
try {
while(true) {
server = new ServerSocket(2345);
System.out.println("[!] Server waiting.");
Socket pipe = null;
pipe = server.accept();
ObjectInputStream serverInputStream = new ObjectInputStream(pipe.getInputStream());
m_rectangle = (SerializableRectangle) serverInputStream.readObject();
System.out.println(m_rectangle.toString());
}
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public Rectangle getRectangle(){
return new Rectangle(
(int)m_rectangle.getX(),
(int)m_rectangle.getY(),
(int)m_rectangle.getWidth(),
(int)m_rectangle.getHeight()
);
}
}
ServerApplication.java:
public class ServerApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Server Application");
Group root = new Group();
Canvas canvas = new Canvas(300, 250);
GraphicsContext context = canvas.getGraphicsContext2D();
drawShape(context);
root.getChildren().add(canvas);
stage.setScene(new Scene(root));
stage.show();
}
private void drawShape(GraphicsContext context)
{
try{
Server server = new Server();
Thread serverThread = (new Thread(server));
serverThread.setName("Server Thread");
serverThread.setDaemon(true);
serverThread.start();
Rectangle rect = server.getRectangle();
context.fillRect(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
context.setStroke(Color.BLUE);
}catch (Exception ex){
System.out.println(ex.getMessage());
}
}
public static void main(String[] args)
{
launch();
}
}
Client.java:
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket(InetAddress.getLocalHost(), 2345);
ObjectOutputStream clientOutputStream = new ObjectOutputStream(socket.getOutputStream());
clientOutputStream.writeObject(new SerializableRectangle(10, 10, 200, 200));
clientOutputStream.close();
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}