Server Status in Java

Dieses Thema im Forum "Programmierung" wurde erstellt von Calenria, 26. Oktober 2012.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Calenria
    Offline

    Calenria

    Registriert seit:
    28. Juli 2012
    Beiträge:
    387
    Minecraft:
    Calenria
    Erstmal der Code:
    Code (Text):
    1.  
    2. public class Status {
    3.  
    4.  
    5.     public static void main(String[] args) throws IOException {
    6.         HashMap<String, String> status = serverStatus("serverip", 25565);
    7.        
    8.         for (String key : status.keySet()) {
    9.             System.out.println(key + ":" + status.get(key));
    10.         }
    11.     }
    12.    
    13.     public static HashMap<String, String> serverStatus(String host, Integer port) throws IOException {
    14.         Socket socket = null;
    15.         DataOutputStream out = null;
    16.         DataInputStream in = null;
    17.  
    18.  
    19.         HashMap<String, String> data = new HashMap<String, String>();
    20.         try {
    21.             socket = new Socket(host, 25565);
    22.             out = new DataOutputStream(socket.getOutputStream());            
    23.             in = new DataInputStream(socket.getInputStream());
    24.         } catch (UnknownHostException e) {
    25.             System.err.println("Don't know about host: " + host);
    26.         } catch (IOException e) {
    27.             System.err.println("Couldn't get I/O for " + "the connection to:" + host);
    28.         }
    29.  
    30.  
    31.         out.write(hexStringToByteArray("FE"));
    32.        
    33.         byte[] b = new byte[241];
    34.         in.read(b, 0, 241);
    35.         StringBuffer buffer = new StringBuffer();
    36.         for (int i = 4; i < b.length; i++) {
    37.             if (b[i] != 0) {
    38.                 buffer.append((char) b[i]);
    39.             }
    40.         }
    41.  
    42.  
    43.         String[] split = buffer.toString().split(String.valueOf((char) -89));
    44.        
    45.         data.put("motd", split[0]);
    46.         data.put("players", split[1]);
    47.         data.put("maxplayers", split[2]);
    48.         out.close();
    49.         in.close();
    50.         socket.close();
    51.        
    52.         return data;
    53.     }
    54.  
    55.  
    56.     public static byte[] hexStringToByteArray(String s) {
    57.         int len = s.length();
    58.         byte[] data = new byte[len / 2];
    59.         for (int i = 0; i < len; i += 2) {
    60.             data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
    61.         }
    62.         return data;
    63.     }
    64.  
    65.  
    66. }
    67.  
    Wie ich finde sieht das ganze noch recht hässlich aus mit dem ganzen Hex/Char/Byte zeug, jemand eine Idee für eine elegantere Lösung?
     
    #1
  2. Für was soll den das gut sein? Für ein Programm oder wie? :rolleyes:
     
    #2
  3. Calenria
    Offline

    Calenria

    Registriert seit:
    28. Juli 2012
    Beiträge:
    387
    Minecraft:
    Calenria
    Ja, eine einfache Server Status Abfrage die eine HashMap mit den Keys motd, players und maxplayers für eine Webseite zurückliefert.
     
    #3
Status des Themas:
Es sind keine weiteren Antworten möglich.