Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to know if the Remote-Server got disconnected from Remote-Control Java Code
    text
    copied!<p>I have this code, I need to display "disconnected" in a label if it is disconnected from the server window. My problem is that I don't know how to detect if I got disconnected. I want to detect the connection status even if there is no connection or there's no trigger from the other end.</p> <pre><code>// Copyright 2012 // Android Remote Desktop Server Ver. 1.0 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.util.Random; public class ServerWindow implements ActionListener{ private RemoteDataServer server; private Thread sThread; //server thread private static final int WINDOW_HEIGHT = 200; private static final int WINDOW_WIDTH = 350; private String ipAddress; private JFrame window = new JFrame("Remote Control for Android"); private JLabel addressLabel = new JLabel(""); private JLabel portLabel = new JLabel("Android Remote Control Port: "); private JTextArea[] buffers = new JTextArea[3]; private JTextField portTxt = new JTextField(5); private JLabel serverMessages = new JLabel("Not Connected"); private JButton connectButton = new JButton("Start Server"); private JButton disconnectButton = new JButton("Stop Server"); public boolean connected = false; public ServerWindow(){ server = new RemoteDataServer(); window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); connectButton.addActionListener(this); disconnectButton.addActionListener(this); Container c = window.getContentPane(); c.setLayout(new FlowLayout()); try{ InetAddress ip = InetAddress.getLocalHost(); ipAddress = ip.getHostAddress(); addressLabel.setText("Android Remote Control Server IP Address: "+ipAddress); } catch(Exception e){addressLabel.setText("IP Address Could Not be Resolved");} int x; for(x = 0; x &lt; 3; x++){ buffers[x] = new JTextArea("", 1, 30); buffers[x].setEditable(false); buffers[x].setBackground(window.getBackground()); } portTxt.setEditable(false); Random portRandom = new Random(); for (int i = 0; i &lt; 10; i++) { int port = portRandom.nextInt(4998) + 1; int portNum = 5000+port; String portString = Integer.toString(portNum); portTxt.setText(portString); } c.add(addressLabel); c.add(buffers[0]); c.add(portLabel); //portTxt.setText("5444"); c.add(portTxt); c.add(buffers[1]); c.add(connectButton); c.add(disconnectButton); c.add(buffers[2]); c.add(serverMessages); window.setLocationRelativeTo(null); window.setVisible(true); window.setResizable(false); } public void actionPerformed(ActionEvent e){ Object src = e.getSource(); if(src instanceof JButton){ if((JButton)src == connectButton){ int port = Integer.parseInt(portTxt.getText()); runServer(port); } else if((JButton)src == disconnectButton){ closeServer(); } } } public void runServer(int port){ if(port &lt;= 9999){ server.setPort(port); sThread = new Thread(server); sThread.start(); } else{ serverMessages.setText("The port Number must be less than 10000"); } } public void closeServer(){ serverMessages.setText("Disconnected"); server.shutdown(); connectButton.setEnabled(true); } public static void main(String[] args){ new ServerWindow(); } public class RemoteDataServer implements Runnable{ int PORT; private DatagramSocket server; private byte[] buf; private DatagramPacket dgp; private String message; private AutoBot bot; public RemoteDataServer(int port){ PORT = port; buf = new byte[1000]; dgp = new DatagramPacket(buf, buf.length); bot = new AutoBot(); serverMessages.setText("Not Connected"); } public RemoteDataServer(){ buf = new byte[1000]; dgp = new DatagramPacket(buf, buf.length); bot = new AutoBot(); serverMessages.setText("Not Connected"); } public String getIpAddress(){ String returnStr; try{ InetAddress ip = InetAddress.getLocalHost(); returnStr = ip.getCanonicalHostName(); } catch(Exception e){ returnStr = new String("Could Not be Resolve Ip Address");} return returnStr; } public void setPort(int port){ PORT = port; } public void shutdown(){ try{server.close(); serverMessages.setText("Disconnected");} catch(Exception e){} } public void run(){ //boolean connected = false; try {InetAddress ip = InetAddress.getLocalHost(); serverMessages.setText("Waiting for connection on " + ip.getCanonicalHostName()); server = new DatagramSocket(PORT, ip); connected = true; connectButton.setEnabled(false); } catch(BindException e){ serverMessages.setText("Port "+PORT+" is already in use. Use a different Port"); } catch(Exception e){serverMessages.setText("Unable to connect");} while(connected){ //Runtime.getRuntime().exit(0); // get message from sender try{ server.receive(dgp); // translate and use the message to automate the desktop message = new String(dgp.getData(), 0, dgp.getLength()); if (message.equals("Connectivity")){ //send response to confirm connectivity serverMessages.setText("Trying to Connect"); server.send(dgp); //echo the message back }else if(message.equals("Connected")){ server.send(dgp); //echo the message back }else if(message.equals("Close")){ serverMessages.setText("Controller has Disconnected. Trying to reconnect."); //echo the message back }else{ serverMessages.setText("Android Phone Connected to ARD Server"); bot.handleMessage(message); server.receive(dgp); } }catch(Exception e){ serverMessages.setText("Disconnected"); connected = false;} } } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload