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

IO::Select und Sockets

Leser: 1


<< >> 10 Einträge, 1 Seite
pq
 2003-11-29 15:07
#38190 #38190
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
schmeiss mal die zeile
  while ($line = <STDIN>){
raus. da hängt dein programm. und dann stimmt die anzahl der
}-klammern auch wieder
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2003-11-29 16:18
#38191 #38191
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Tipp: Gewöhn Dir eine ordentliche Einrückung an, sonst wirst Du kein Programm egal in welcher Sprache schreiben können, das weit über das Niveau eines Hallo-Welt-Programms herausgeht.

Dazu empfehlenswert: perldoc perlstyle

Edit: Außerdem ist es hilfreich einen Editor zu haben, der einem die korrespondierenden Klammern anzeigt, wie etwa Komodo (und viele andere auch).\n\n

<!--EDIT|Crian|1070115537-->
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
Crian
 2003-11-29 16:32
#38192 #38192
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ok Sorry, konnte ich ja nicht wissen. Bei mir wird die Einrückung allerdings nicht von den Code-Tags zerstört ... oder jedenfalls nicht ganz. (OT: Wird Zeit, dass wir die neue Forensoftware kriegen, irgendwie traue ich Esskar und Konsorten da besseres zu ... schon die ganzen Verbesserungen zu Beginn der Nutzung dieser Forensoftware waren sehr überzeugend :-).
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
pq
 2003-11-29 17:02
#38193 #38193
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich bin mal so frei:
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
#!/usr/bin/perl -w
use strict;
use IO::Socket;
use IO::Select;
my $hname = "localhost";
my $hport = $ARGV[0];

my $sock = new IO::Socket::INET->new(
 LocalPort => $hport,
 Listen => 10,
 Reuse => 1,
 Proto => 'tcp'
);
my $sel = new IO::Select->new();
$sel->add($sock);
$sel->add(*STDIN);

die "*Could not Connect" unless $sock;
while(1){
 while(my @ready = $sel->can_read) {
   foreach my $fh (@ready) {
     if ($fh eq $sock) {
       my $new = $sock->accept;
       $sel->add($new);
       print "Willkommen\n";
     }
     elsif($fh eq *STDIN) {
       my $buf = <STDIN>;
       print "Client\n";
       client($buf);
     }
     else{
       $sel->remove($fh);
       $fh->close;
     }
   }
 }
}
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
mrtrashtalk
 2003-11-29 14:30
#38194 #38194
User since
2003-11-29
4 Artikel
BenutzerIn
[default_avatar]
Hallo erstmal, bin neu hier und hab natürlich auch gleich ein Problem.

Ich möchte ein Perl-Programm schreiben, dass Client und Server vereint. Dazu will ich checken ob die Eingabe von STDIN kommt(d.h der Client hat eine Anweisung bekommen), oder ob die Eingabe von einem Socket kommt(d.h der Server soll etwas mit der Verbingung machen). Leider steckt da irgendwo noch ein grober Fehler. Hier was ich bis jetzt hab:

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
use IO::Socket; 
use IO::Select;
$hname = "localhost";
$hport = $ARGV[0];

$sock = new IO::Socket::INET->new(LocalPort => $hport,
Listen => 10,
Reuse => 1,
Proto => 'tcp');
$sel = new IO::Select->new();
$sel->add($sock);
$sel->add(*STDIN);

die "*Could not Connect" unless $sock;
while(1){
while ($line = <STDIN>){
while(@ready = $sel->can_read) {
foreach $fh (@ready) {
if ($fh == $sock) {
$new = $sock->accept;
$sel->add($new);
print "Willkommen";
}

elsif($fh == *STDIN) {
$buf = <STDIN>;
print "Client\n";
client($buf);
}
else{
$sel->remove($fh);
$fh->close;
}
}
}
}


Hat irgendjemand eine Idee?

Also das Problem ist, das keinerlei Reaktion vom Programm kommt. Egal ob ich jetzt versuche eine Verbindung mit dem Socket aufzubauen oder einen Befehl eingebe.\n\n

<!--EDIT|mrtrashtalk|1070109349-->
mrtrashtalk
 2003-11-29 15:50
#38195 #38195
User since
2003-11-29
4 Artikel
BenutzerIn
[default_avatar]
problem ist nur wenn ich das mache, liest er keine eingabe mehr von der tastatur
mrtrashtalk
 2003-11-29 16:22
#38196 #38196
User since
2003-11-29
4 Artikel
BenutzerIn
[default_avatar]
Natürlich ist in meinem Programm alles eingerückt. Ich schreib auch Programme die ein paar hundert Zeilen haben.

Leider hat das code-tag meine Einrückungen nicht beachtet bzw. zerstört.

Als Editor benutz ich Jedit der mir auch die Klammern anzeigt.
pq
 2003-11-29 16:58
#38197 #38197
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=mrtrashtalk,29.11.2003, 14:50]problem ist nur wenn ich das mache, liest er keine eingabe mehr von der tastatur[/quote]
bei mir schon.
This is perl, v5.8.0 built for i686-linux

Edit: allerdings habe ich das programm etwas abwandeln müssen, denn es
kamen jede menge warnings. du hast doch warnungen eingeschaltet, oder?
zusätzlich solltest du dich mit strict anfreunden.
jedenfalls vergleiche ich die filehandles mit eq anstatt mit ==\n\n

<!--EDIT|pq|1070118030-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
jan10001
 2003-11-29 17:03
#38198 #38198
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Quote
Ich möchte ein Perl-Programm schreiben, dass Client und Server vereint. Dazu will ich checken ob die Eingabe von STDIN kommt(d.h der Client hat eine Anweisung bekommen), oder ob die Eingabe von einem Socket kommt(d.h der Server soll etwas mit der Verbingung machen).
Warum willst du eigentlich beides mischen??
mrtrashtalk
 2003-11-29 17:24
#38199 #38199
User since
2003-11-29
4 Artikel
BenutzerIn
[default_avatar]
Arrrggghh. Sowas ist natürlich ärgerlich. Wenn ich das Programm unter Windows laufen lasse, nimmt er keine Eingaben mehr an.

Jetzt hab ich das ganze mal unter Linux versucht, und da klappt es tadellos.

Warnings hat ich eigentlich eingeschaltet.

Irgendeine Idee warum das unter Linux klappt und unter Windows nicht?
(Bitte keine Fragen warum ich Windows benutze wenn ich doch Linux hernehmen kann ;-) )

Ach ja, vielen Dank :-))
<< >> 10 Einträge, 1 Seite



View all threads created 2003-11-29 15:07.