Hi, I try to send commands to my Minecraft server via my website. The web server and the Minecraft server is hosted on the same machine and it is a dedicated server so full access. Rcon port is 25566 and I have set a password which I will define as "passwd" here. So I found two files by searching on the net but I get an error: "Unable to open socket: Connection refused (111)" Here are the contents of files: PHP: <?php include_once("rcon.php"); // Extend the rcon class to tweak it for minecraft. class minecraftRcon extends rcon{ function mcSendCommand($Command){ $this->_Write(SERVERDATA_EXECCOMMAND,$Command,''); } function mcRconCommand($Command){ $this->mcSendcommand($Command); $ret = $this->Read(); return $ret[$this->_Id]['S1']; } } // Server connection varialbes $server = "localhost"; $rconPort = 25566; $rconPass = "passwd"; // Connect to the server $r = new minecraftRcon($server, $rconPort, $rconPass); // Authenticate, and if so, execute command(s) if ( $r->Auth() ) { echo "Authenticated !<br>"; // Send a command var_dump($r->mcRconCommand('say Ca marche !')); }else{ echo "Authentification failed !<br>"; } ?> rcon.php : PHP: <?php/* Basic CS:S Rcon class by Freman. (V1.00) ---------------------------------------------- Ok, it's a completely working class now with with multi-packet responses Contact: printf("%s%s%s%s%s%s%s%s%s%d%s%s%s","rc","on",chr(46),"cl","ass",chr(64),"pri","ya",chr(46),2,"y",chr(46),"net") Behaviour I've noticed: rcon is not returning the packet id.*/ define("SERVERDATA_EXECCOMMAND",2);define("SERVERDATA_AUTH",3); class RCon { var $Password = "passwd"; var $Host = "127.0.0.1"; var $Port = 25566; var $_Sock = null; var $_Id = 0; function RCon ($Host,$Port,$Password) { $this->Password = $Password; $this->Host = $Host; $this->Port = $Port; $this->_Sock = @fsockopen($this->Host,$this->Port, $errno, $errstr, 30) or die("Unable to open socket: $errstr ($errno)\n"); $this->_Set_Timeout($this->_Sock,2,500); } function Auth () { $PackID = $this->_Write(SERVERDATA_AUTH,$this->Password); // Real response (id: -1 = failure) $ret = $this->_PacketRead(); if ($ret[1]['id'] == -1) { die("Authentication Failure\n"); } } function _Set_Timeout(&$res,$s,$m=0) { if (version_compare(phpversion(),'4.3.0','<')) { return socket_set_timeout($res,$s,$m); } return stream_set_timeout($res,$s,$m); } function _Write($cmd, $s1='', $s2='') { // Get and increment the packet id $id = ++$this->_Id; // Put our packet together $data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0); // Prefix the packet size $data = pack("V",strlen($data)).$data; // Send packet fwrite($this->_Sock,$data,strlen($data)); // In case we want it later we'll return the packet id return $id; } function _PacketRead() { //Declare the return array $retarray = array(); //Fetch the packet size while ($size = [USER=90736681]Fread[/USER]($this->_Sock,4)) { $size = unpack('V1Size',$size); //Work around valve breaking the protocol if ($size["Size"] > 4096) { //pad with 8 nulls $packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096); } else { //Read the packet back $packet = fread($this->_Sock,$size["Size"]); } array_push($retarray,unpack("V1ID/V1Response/a*S1/a*S2",$packet)); } return $retarray; } function Read() { $Packets = $this->_PacketRead(); foreach($Packets as $pack) { if (isset($ret[$pack['ID']])) { $ret[$pack['ID']]['S1'] .= $pack['S1']; $ret[$pack['ID']]['S2'] .= $pack['S1']; } else { $ret[$pack['ID']] = array( 'Response' => $pack['Response'], 'S1' => $pack['S1'], 'S2' => $pack['S2'], ); } } return $ret; } function sendCommand($Command) { $Command = '"'.trim(str_replace(' ','" "', $Command)).'"'; $this->_Write(SERVERDATA_EXECCOMMAND,$Command,''); } function rconCommand($Command) { $this->sendcommand($Command); $ret = $this->Read(); //ATM: Source servers don't return the request id, but if they fix this the code below should read as // return $ret[$this->_Id]['S1']; return $ret[0]['S1']; }}?> So, if you need more information do not hesitate to ask And thanks to those who already take the trouble to look into my problem And special thanks to Google Translate (I French) In server.properties I have : Code: enable-rcon=true rcon.port=25566 rcon.password=mdp And ports are open : Code: iptables -A INPUT -v -p TCP --dport 25566 -j ACCEPT iptables -A INPUT -v -p UDP --dport 25566 -j ACCEPT iptables -A OUTPUT -v -p TCP --dport 25566 -j ACCEPT iptables -A OUTPUT -v -p UDP --dport 25566 -j ACCEPT I note that it is not necessary to use these scripts, if you find any others, it also works Problem solved. See http://fr.openclassrooms.com/forum/sujet/erreur-rcon-111?page=1#message-85616454 EDIT by Moderator: merged posts, please use the edit button instead of double posting.