Thread 2 Sockets in einem Script Listen -> Post (3 answers)
Opened by Smut at 2011-02-23 10:55

Smut
 2011-02-23 10:55
#145919 #145919
User since
2011-02-23
2 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe folgendes Problem:
Ich möchte einen IRC Bot schreiben der dazu noch auf einem weiteren Port lauscht. Er soll also im IRC Daten ausgeben die ich ihm über einen weiteres Socket zu kommen lasse.
Mir ist nun nicht klar wie ich auf dem einen Socket lauschen kann und es dann auf dem anderen ausgeben.
Könnt ihr mir da vllt helfen?

Vielen Dank im voraus :)

Gruß
Smut


Wie folgt sieht das zur Zeit bei mir aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl

use IO::Socket;

$server = "__IRCSERVER__";
$port = 6667;
$channel = "#channel1";
$nick = "perlbot";

my $sock_listen = new IO::Socket::INET(Localhost => '127.0.0.1', LocalPort => '7070', Proto => 'tcp', Listen => 1, => Reuse => 1,);
die "Could not create socket: $!\n" unless $sock_listen;

$sock_irc = IO::Socket::INET->new(Proto => "tcp", PeerAddr => "$server", PeerPort => "$port") || die "Failed to connect to $server:$port\n";
print $sock_irc "NICK $nick\r\n"; 
print $sock_irc "USER $nick $server $nick $nick\r\n";
print $sock_irc "JOIN $channel\r\n";
print $sock_irc "PRIVMSG $channel :Hello\r\n";

while(<$sock_irc>) {
    print $_;
    if(/PING/) {
        $line = $_;
        $line =~ s/PING/PONG/;
        print $sock_irc $line;
    } elsif(/PRIVMSG/) {
        $line = $_;
        $line =~ s/\r\n//; # Remove \r\n
        @tokens = split /:/, $line; # Split line into tokens
        @command = split / /, @tokens[1]; # Split second token (first is just blank in this case)
        @message = split / /, @tokens[2]; # Split third token
        @user = split /!/, @command[0]; # Split first command token, which is USERNAME!USERHOST
        if($message[0] =~ m/.exit/) {
            print $sock_irc "PRIVMSG $command[2] :Exit command sent by $user[0] ($user[1])\r\n";
            print $sock_irc "QUIT :$message[1]\r\n";
            close $sock_irc;
        }
        if($message[0] =~ m/.join/) {
            print $sock_irc "PRIVMSG $command[2] :Join command sent by $user[0] ($user[1])\r\n";
            print $sock_irc "JOIN $message[1]\r\n";
        }
        if($message[0] =~ m/.msg/) {
            print $sock_irc "PRIVMSG $command[2] :Message command sent by $user[0] ($user[1])\r\n";
            print $sock_irc "PRIVMSG $message[1] :$message[2]\r\n";
        }
    }
}

Last edited: 2011-02-23 10:58:05 +0100 (CET)

View full thread 2 Sockets in einem Script Listen -> Post