Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11980[/thread]

Socket receive-Frage (Seite 3)

Leser: 6


<< |< 1 2 3 4 >| >> 36 Einträge, 4 Seiten
H3llGhost
 2008-06-08 01:12
#110879 #110879
User since
2007-10-14
60 Artikel
BenutzerIn
[default_avatar]
Hmm ...
Das ist schon ein guter Ansatz ...
Warum ich recv gewählt habe?!
Weil es für mich das Gegenteil von send ist ...

Was sollte ich denn anstatt von recv nutzen?
moritz
 2008-06-08 01:25
#110880 #110880
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Also so funktioniert programmieren nicht. Sich irgend welche Namen ausdenken, die dann irgendwie verwenden und hoffen, dass das ganze klappt - das funktioniert meistens nicht.

Stattdessen sollte man in die Dokumentation schauen, was es für Funktionen und Methoden gibt.
in perlfunc steht z.B. was von "read", in CPAN:IO::Socket gibt es die Methode recv.

Wenn du damit nicht zurecht kommst, schau dir einfach mal einige Beispiele an, es gibt ja genug Sourcecode, den man sich im Internet anschauen kann.
H3llGhost
 2008-06-08 01:30
#110881 #110881
User since
2007-10-14
60 Artikel
BenutzerIn
[default_avatar]
Also ich bin jetzt wieder hier angekommen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
        if (IO::Select->new($s_socket)->can_read(2))
        {
                $s_socket->recv($s_output, 1024);
                print $s_output;
                # print "yes";
                # while (my $rc = $s_socket->recv($s_output, 1024) ) {
                        # print $s_output;
                        # $buffer .= $s_output;
                # }
        }


So wird zwar nichts angezeigt, aber es kommt auch kein Fehler.
Sobald ich aber eine While-Schleife um etwas davon mache kommt der Fehler wieder.
Gast Gast
 2008-06-09 15:46
#110904 #110904
Also an deiner Stelle würde ich IO::Socket::INET verwenden, im Prinzip sollte folgendes funktionieren:
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
#!/usr/bin/perl

use strict;
use warnings;

use IO::Socket::INET;

print "create socket..\n";

my $sock = IO::Socket::INET->new(
        'PeerAddr'      => '***.***.***.***',
        'PeerPort'      => '27501',
        'Proto'         => 'udp',
);

print "send data request..\n";

$sock->send( "\xff\xffZ\xff" );

print "answer:\n";

while ( my $rc = $sock->recv( my $buffer, 1024 ) )
{
        print $buffer;
} # while

<STDIN>;

__END__

Auf timeouts wird hier nicht reagiert, kannste aber schnell nachrüsten.

MfG


//ModEdit GwenDragon: IP anonymisiert
Gast Gast
 2008-06-10 13:54
#110933 #110933
H3llGhost+2008-06-07 22:30:05--
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
#!/usr/bin/perl

use strict;
use warnings;

use IO::Socket;
use IO::Select;
use IO::Handle;

my $g_masterserver_address = "*.*.*.*";
my $g_masterserver_port    = "27501";
        
        my $timeout = 0;

        my $address        = $g_masterserver_address;
        my $port           = $g_masterserver_port;
        my $dest           = sockaddr_in($port, inet_aton($address));
        my ($rin, $rout, $test);

        my $msg = chr(0xff).chr(0xff)."Z".chr(0xff);
        my $s_socket;
        my $proto = getprotobyname('udp');
        socket($s_socket, AF_INET, SOCK_DGRAM, $proto);
        my $bytes = send($s_socket, $msg, 0, $dest);
        print("sent $bytes bytes to '$address:$port'");
        my $buffer = '';
        my $s_output;
        
        while (my $rc = $s_socket->recv($s_output, 1024) ) {
                print $s_output;
                $buffer .= $s_output;
        }

exit(0);


Danke für die IP-Adresse. Schön zu wissen, dass dort kein Paketfilter aktiv ist...
Wenn das nächste mal dieser Port offen ist, werd ich deinen Server erstmal
lahmlegen, denn $buffer kann ja wachsen bis dein Server aus allen nähten
platzt :D

//ModEdit GwenDragon: IP anonymisiert
GwenDragon
 2008-06-10 16:38
#110938 #110938
User since
2005-01-17
14612 Artikel
Admin1
[Homepage]
user image
Gast+2008-06-10 11:54:58--

Danke für die IP-Adresse. Schön zu wissen, dass dort kein Paketfilter aktiv ist...
Wenn das nächste mal dieser Port offen ist, werd ich deinen Server erstmal
lahmlegen, denn $buffer kann ja wachsen bis dein Server aus allen nähten
platzt :D

Solche Drohungen sind hier nicht erwünscht. Ich hoffe, das ist als lehrreicher Scherz gemeint. Angriffe auf Rechner/Server dulden wir hier nicht.
Gast Gast
 2008-06-10 16:51
#110940 #110940
na klar war das eher als Tipp gemeint und weniger eine Drohung ;-)
MatthiasW
 2008-06-10 17:10
#110941 #110941
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
@gwendragon, die IP ist noch auf den anderen Seiten zu lesen, ich entschuldige mich dafür, dass ich sie in meinem Snippet ( edit: der Gast Beitrag mit IO::Socket::INET ) nicht selbst anonymisiert habe.
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
GwenDragon
 2008-06-10 17:22
#110945 #110945
User since
2005-01-17
14612 Artikel
Admin1
[Homepage]
user image
Entschuldigen muss du dich nicht; es ist nur sehr fahrlässig, die Daten so ins Netz zu stellen

//Modedit: IP überall anonymisiert
Gast Gast
 2008-06-10 18:32
#110948 #110948
Gast+2008-06-09 13:46:03--
Also an deiner Stelle würde ich IO::Socket::INET verwenden, im Prinzip sollte folgendes funktionieren:
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
#!/usr/bin/perl

use strict;
use warnings;

use IO::Socket::INET;

print "create socket..\n";

my $sock = IO::Socket::INET->new(
        'PeerAddr'      => '***.***.***.***',
        'PeerPort'      => '27501',
        'Proto'         => 'udp',
);

print "send data request..\n";

$sock->send( "\xff\xffZ\xff" );

print "answer:\n";

while ( my $rc = $sock->recv( my $buffer, 1024 ) )
{
        print $buffer;
} # while

<STDIN>;

__END__

Auf timeouts wird hier nicht reagiert, kannste aber schnell nachrüsten.

MfG


//ModEdit GwenDragon: IP anonymisiert


Danke für die Antwort ... ;)
Habe es nun wie folgt angepasst, aber leider kommt keine Antwort an ...
Und bei IP muss ja die IP vom Empfänger rein oder?!

Code: (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
#!/usr/bin/perl

use strict;
use warnings;

use IO::Socket::INET;

print "create socket..\n";

my $sock = IO::Socket::INET->new(
'PeerAddr' => '*.*.*.*',
'PeerPort' => '27501',
'Proto' => 'udp',
);

print "send data request...\n";
my $msg = chr(0xff).chr(0xff)."Z".chr(0xff);

my $bytes = $sock->send($msg);
print "send $bytes bytes ...\n\n";
print "answer:\n";

while ( my $rc = $sock->recv( my $buffer, 1024 ) )
{
print $buffer;
} # while

<STDIN>;

__END__


Ist das richtig so?!
<< |< 1 2 3 4 >| >> 36 Einträge, 4 Seiten



View all threads created 2008-06-05 17:32.