Java Source for remote rcon command app's.

Started by trooper22, November 27, 2005, 12:04:57 AM

Previous topic - Next topic

trooper22

I found it almost impossible to find reliable info on how to send rcon commands through UDP and programming so here is the source code (in java) that allows you to send rcon commands to a gamer server.

   

   the code is heavily commented, but if you want to know more about any part of the code, just post bellow.

   

   

   import java.io.*;
   import java.net.*;
   
   /**
    * Sends commands to a Moh game server via UDP and recieves result
    *
    * @author James Luck
    * @version 1.1 26/11/05
    */
   public class ServerComm
   {
       //initialize vars
       private int port;
       private String command;
       private InetAddress ipAddress;
       private DatagramPacket dps;
       private DatagramPacket dpr;
       private String password;
   
   
       /**
        * * Consturctor for the ServerComm Class
        */
   
       public ServerComm(String address, int port, String password)
       {
           this.port = port;
           this.password = password ;
           parseAddress(address);
       }
   
   
       /**
        * Method to parse the string address into a useable, valid java-net ip address
        */
   
       private void parseAddress(String address)
       {
           try {
               ipAddress = InetAddress.getByName(address);
               System.out.println(ipAddress);
           }
           catch(IOException ex){
           }
       }
   
   
       /**
        * Method that sends rcon commands to a specified Moh server and retrieves the result
        */
   
       public String sendCommand(String rconCommand)
       {
           //Command to be sent to server
           command = "xxxxxrcon " + password + " " + rconCommand + "xx";
           try{
               //Create new UDP connection and connect to specified ip address + port
               DatagramSocket dp = new DatagramSocket();
               dp.connect(ipAddress, port);
               dp.setSoTimeout(2000);
   
               //Return the command as bytes
               byte[] sender = command.getBytes();
               //Replace first 5 chars to create OOB (out of band) header
               byte oob = (byte)0xff;
               for(int i = 0; i < 4; i++){
                   sender[i] = oob;
               }
               sender[4] = (byte)0x02;
               //Replace last 2 chars to create packet terminating chars
               sender[command.length() - 2 ] = (byte)0x0a;
               sender[command.length() - 1] = (byte)0x00;
   
               //Initialize and send command as UDP packet to specified ip address and port
               dps = new DatagramPacket(sender, sender.length, ipAddress, port);
               dp.send(dps);
               System.out.println("Sending command to " + ipAddress + ":" + port);
               //Create recieve buffer
               byte[] buffer = new byte[4000];
               //recieve command
               dpr = new DatagramPacket(buffer,buffer.length);
               dp.receive(dpr);
               System.out.println("Recieved command from " + ipAddress + ":" + port);
           }
           catch(IOException ex){
               //Catch failed command send/recieve
               System.out.println("error: Send command failed");
           }
           //Return recieved packet as substring if command sent is "status"
           if (rconCommand.equals("status")){
               int sendFrom = new String(dpr.getData(),0,dpr.getLength()).indexOf("-----n");
               return new String(dpr.getData(),0,dpr.getLength()).substring(sendFrom + 7);
           }
           //Else- return recieved packet in full
           else{
               return new String(dpr.getData(),0,dpr.getLength());
           }
       }
   }
   
[/][/]

Elgan {sfx}