Schrift
[thread]4314[/thread]

socket: Übergabe von Daten

Leser: 3


<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten
esskar
 2005-04-05 03:31
#37819 #37819
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
while(my $client = $server->accept()) {
   $select->add($client);
   foreach my $socket ($select->can_read(5)) {
       print "$socket\n";
   }
}


dumm ist jetzt nur, dass das accept ja auch nur zurück kehrt, wenn du dich verbindest; abhilfe:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use strict;

use IO::Socket::INET;
use IO::Select;

my $server = IO::Socket::INET->new(
LocalPort => 2005,
type => SOCK_STREAM,
Reuse => 1,
Listen => 10
) or die "Server läuft nicht: $@\n";

my $select = IO::Select->new($server);

while(my @readable = $select->can_read) {
foreach my $socket (@readable) {
if($socket == $server) {
# Create a new socket
print "New client connects\n";
my $client = $socket->accept; # kehrt direkt zurück
$select->add($client);
} else {
my $line = $socket->getline;
if(defined $line) {
$line =~ s!\r?\n$!!g;
if(lc($line) eq "quit") {
print "Client quits\n";
delete_socket($select, $socket);
} else {
print "Client says: [$line]\n";
}
} else {
print "Connection closed by client\n";
delete_socket($select, $socket);
}
}
}
}

sub delete_socket {
my ($sel, $sock) = @_;
$sel->remove($sock);
$sock->close;
}
\n\n

<!--EDIT|esskar|1112657703-->
esskar
 2005-04-05 04:00
#37820 #37820
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Crian
 2005-04-05 17:29
#37821 #37821
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Schau mal ins Wiki... http://wiki.perl-community.de/bin/view/Wissensbasis/AllgemeinesFork\n\n

<!--EDIT|Crian|1112707930-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
sri
 2005-04-05 19:37
#37822 #37822
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=esskar,05.04.2005, 12:26]
@sri: funzt POE mit Tk? (fork und Tk war immer schon ein Problem!)[/quote]
Hervorragend sogar!\n\n

<!--EDIT|sri|1112715472-->
Froschpopo
 2005-04-05 00:32
#37823 #37823
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hiho,

ich experimentiere grad so ein bissl mit sockets rum.
Ich hab nen client gebaut der nen socket zu dem server hier aufbaut:

server.pl:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use IO::Socket;

my $server = IO::Socket::INET->new(
    LocalPort => 2005,
    type => SOCK_STREAM,
    Reuse => 1,
    Listen => 10
)
    or die "Server läuft nicht: $@\n";

while (my $client = $server->accept()) {
    print "Anfrage\n";
}
close($server);

wie kann ich jetzt nen string vom client empfangen bzw printen?
Ansonsten funzt der server soweit, wenn ich mit dem client etwas losschicke gibt er mir immer wie erwartet "anfrage" aus.\n\n

<!--EDIT|Froschpopo|1112646790-->
Froschpopo
 2005-04-05 02:58
#37824 #37824
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hm, also irgendwas schlägt hier fehl: unknown error
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use IO::Socket;

my $server = IO::Socket::INET->new(
LocalPort => 2005,
type => SOCK_STREAM,
Reuse => 1,
Listen => 10
)
or die "Server läuft nicht: $@\n";

my ($data_read, $flags);

$server->recv($data_read, $flags)
or die "Kann nicht empfangen: $!";
esskar
 2005-04-05 03:33
#37825 #37825
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
jetzt kannst du dich z.B. mit "telnet 127.0.0.1 2005" connecten...
schreib was ins telnet fenster; sobald du enter drückst, wird es in dem server fenster angezeigt!
wenn du quit eingibst, wird die verbindung zum server unterbrochen...
du kannst auch mal mehrer telnet's aufmachen, damit es spanneder wird!
Froschpopo
 2005-04-05 04:00
#37826 #37826
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
aber ich könnte doch jeden neuen client forken oder ?
esskar
 2005-04-05 04:26
#37827 #37827
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay...
das funzt ja doch jetzt nur, wenn du einmal was schickst...
was passiert,wenn du mit der gleichen verbindung nocheinmal was schicken willst? wird es dann auch ausgegeben?
Nein!
und da der server nicht weiß, wann er was geschickt bekommt, ist es sinnvoll, select zu nutzen!
zipster
 2005-04-05 16:23
#37828 #37828
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Läuft das bei IO::SOCKET<->IO::SOCKET genauso wie bei IO::SOCKET<->telnet?
Wenn nein wie müßte den der Client aussehen?

Wie sendet man den was an den Client?

Und gibt es auch ne möglichkeit das wenn sich ein Client anmeldet das dann der Server nen neuen Socket in Form eines anderen Perl-Scripts aufmacht?
Das heißt in Kurzform Socket->Client meldet sich an->Serverstartet Socket_new.pl und übergibt alle Daten.

Ist sowas möglich?
<< |< 1 2 3 4 >| >> 33 Einträge, 4 Seiten



View all threads created 2005-04-05 03:31.