Avatar billede boselbach Nybegynder
25. januar 2005 - 01:55 Der er 10 kommentarer

IRC Bot serverliste

Hej
Jeg er i gang med at lave en ircbot, jeg kan få den til at komme på et netværk, joine en kanal og lave en join message.
Men tit har jeg problemet at den ikke vil logge på en server, dette ville jeg løse med det her kode, men den skriver
Warning: socket_connect() Host lookup failed [11001]: værten kendes ikke.

$serverliste = fopen("serverlist.txt","r");
while (!feof($serverliste)) {
  $i=0;
  $serv = fgets($serverliste,4096);
  $strserv = explode(":",$serv);
  $strserv = trim($strserv[$i]);
  $i++;
      $connect = socket_connect($sock,$strserv[$i],$port);
    while (!$connect) {
          $connect = socket_connect($sock,$strserv[$i],$port);
}
      fclose($serverliste);
}

min server liste ser således ud:
eu.undernet.org:Amsterdam.NL.EU.undernet.org:Amsterdam2.NL.EU.undernet.org:bucharest.ro.eu.undernet.org:Carouge.CH.EU.U:dernet.org

Det er nogle af de servere der står i tekst filen, jeg håber der er en der kan se hvad jeg har lavet galt
Mvh
Bo
Avatar billede boselbach Nybegynder
25. januar 2005 - 02:03 #1
Ups jeg har ikke fået sat nogle point, men jeg giver 60 point. så finder vi lige en måde
jeg kan give dem på.
Avatar billede rasmusbg Nybegynder
25. januar 2005 - 11:07 #2
$strserv = explode(":",$serv);
$strserv = trim($strserv[$i]);

I anden linie, jeg har pastet overskriver du det array med servere, som du lige har fået lavet vha. trim, med en string indeholdende navnet på den første server.
To linier længere nede i dit kodeeksempel prøver du at bruge $strserv som et array.
Avatar billede boselbach Nybegynder
25. januar 2005 - 11:25 #3
skal jeg da fjerne trim?
$serverliste = fopen("serverlist.txt","r");
while (!feof($serverliste)) {
  $i=0;
  $serv = fgets($serverliste,4096);
  $strserv = explode(":",$serv);
      $connect = socket_connect($sock,$strserv[$i],$port);
    while (!$connect) {
          $connect = socket_connect($sock,$strserv[$i],$port);
          $i++;
}
      fclose($serverliste);
}
det virker stadigvæk, kan jeg ikke få dig til at oprette et eksempel?
Mvh
Bo
Avatar billede rasmusbg Nybegynder
25. januar 2005 - 11:37 #4
Må jeg prøve at se, hvad du har sat $sock og $port til?
Avatar billede boselbach Nybegynder
25. januar 2005 - 11:46 #5
$port = "6667";
$nick = "hejmeddig";
$realname = "hejmeddig";
$channel = "#hejhejhej";

$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if(!$sock){
    print "Jeg kunne ikke oprette en socket";
    exit;
}

$serverliste = fopen("serverlist.txt","r");
while (!feof($serverliste)) {
  $i=0;
  $serv = fgets($serverliste,4096);
  $strserv = explode(":",$serv);
      $connect = socket_connect($sock,$strserv[$i],$port);
    while (!$connect) {
          $connect = socket_connect($sock,$strserv[$i],$port);
          $i++;
}
      fclose($serverliste);
}
Avatar billede rasmusbg Nybegynder
25. januar 2005 - 11:50 #6
Okay...jeg prøver lige at kigge lidt på det og laver et eksempel.
Avatar billede rasmusbg Nybegynder
25. januar 2005 - 12:19 #7
<?php
$serverliste = fopen("./serverlist.txt","r");
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$port = 6667;
$connect = false;
while (!feof($serverliste)) {
        $i=0;
        $serv = fgets($serverliste,4096);
        $strserv = explode(":",$serv);
        while (!$connect && $i < count($strserv)) {
                echo "Server: $strserv[$i]\n";
                echo "Ip: ".gethostbyname(trim($strserv[$i]))."\n";
                $connect = socket_connect($sock,gethostbyname(trim($strserv[$i])),$port);
                $i++;
        }
}
fclose($serverliste);
if ($connect) {
        echo "Forbundet: $sock\n";
} else {
        echo "Ikke forbundet\n";
}
socket_close($sock);
?>

Dette kan jeg få til at connecte.

Det, der var galt, var, at socket_connect() ikke selv laver et DNS-opslag, så den skal have en IP-adresse i stedet for et domænenavn.
Derudover har jeg også tilføjet et check for, om man når enden af $strserv, da scriptet vil ryge i en uendelig løkke, hvis det ikke lykkes at forbinde til nogen af de servere, der er specificeret i $strserv.
Avatar billede boselbach Nybegynder
25. januar 2005 - 12:32 #8
Tak for hjælpen, skal jeg oprette et nyt spørgsmål og give dig 60 point der, eller er der en smartere måde man kan give point på?
Mvh
Bo
Avatar billede rasmusbg Nybegynder
25. januar 2005 - 12:34 #9
Jeg tror det er den eneste mulighed at oprette et nyt spørgsmål.
Avatar billede boselbach Nybegynder
25. januar 2005 - 12:36 #10
ok jeg kalder det for "IRC BOT point til rasmusbg"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester