Schrift
[thread]4315[/thread]

Sofort antworten nach Socket-Connection

Leser: 1


<< >> 7 Einträge, 1 Seite
esskar
 2005-04-12 11:19
#37852 #37852
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
benutz can_write aus IO::Select!
esskar
 2005-04-12 11:35
#37853 #37853
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Froschpopo,12.04.2005, 09:33]Ok mach ich ! Also dann funktioniert $socket->print() nur, wenn getline definiert ist oder ?[/quote]
?
das hat jetzt nic mit getline zu tun;
can_write sagt, ob der socket bereit ist, daten zu empfangen!
snarf
 2005-04-12 12:17
#37854 #37854
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
... so langsam habe ich den (lesenden) Eindruck, daß Du nochmals zu den Grundlagen von Sockets & Co zurückkehren solltest ...

Ohne jetzt zu sehr in gedankliche Anstrengungen verfallen zu wollen, vermute ich mal eben folgendes:

Dein $socket->print zielt genau auf den listening socket des Servers (denn den erfragst Du ja in Deiner if-Schleife), der connectende Client wird ja erst danach (!!!) mit $select->add($client) hinzugefügt und ist somit erst später erreichbar (in dieser Notation jedenfalls nicht innerhalb des $socket == $server Blocks ...

Probiers mal so ...

Code: (dl )
1
2
3
4
5
if($socket == $server) {
my $client = $socket->accept();
print "Connected\n";
$select->add($client);
$client->print("Hallo Client\n");


Keine Ahnung, ob's hilft ...
Froschpopo
 2005-04-12 11:05
#37855 #37855
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich möchte dem Client nach erstellen des neuen Sockets ne Nachricht übermitteln "Connected as froschpopo". Ich versteh aber nicht wo das problem liegt, denn das socket ist zu dem Zeitpunkt wo ich $socket->print() mache doch schon längst erstellt. Warum bekommt der Client also keine Antwort?

Wenn ich das $socket->print() später in dem else-Block mache, also wenn die Verbindung bereits besteht, dann funktioniert es ! Aber halt im if-Block nicht.
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
while(my @readable = $select->can_read) {
    foreach my $socket (@readable) {
        if($socket == $server) {
            print "Connected:Froschpopo\n";
            my $client = $socket->accept;
            $select->add($client);
            $socket->print("Connected as Froschpopo\n"); # hier ist das Problem
        } 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";
               
     $socket->print("$line\n");
               
 }
            } else {
               
 print "Connection closed by client\n";
               
 delete_socket($select, $socket);
            }
        }
    }
}
\n\n

<!--EDIT|Froschpopo|1113289603-->
Froschpopo
 2005-04-12 11:33
#37856 #37856
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ok mach ich ! Also dann funktioniert $socket->print() nur, wenn getline definiert ist oder ?
Froschpopo
 2005-04-12 11:47
#37857 #37857
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hmm, läuft nicht oder ich bin mal wieder zu blöd:
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
while(my @readable = $select->can_read) {
    foreach my $socket (@readable) {
        if($socket == $server) {
$select->can_write();
$socket->print("Hallo Client\n");
            print "Connected\n";
            my $client = $socket->accept;
            $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";
               
     $socket->print("$line\n");
               
 }
            } else {
               
 print "Connection closed by client\n";
               
 delete_socket($select, $socket);
            }
        }
    }
}
\n\n

<!--EDIT|Froschpopo|1113292101-->
Froschpopo
 2005-04-12 12:35
#37858 #37858
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ha funzt !! Danke :-)
<< >> 7 Einträge, 1 Seite



View all threads created 2005-04-12 11:19.