Thread was ist an der syntax falsch?? (61 answers)
Opened by grey1987 at 2007-11-26 12:25

grey1987
 2007-11-27 11:26
#103097 #103097
User since
2007-11-21
83 Artikel
BenutzerIn
[default_avatar]
ich bin nur auf die aussage von nepos eingegangen

"Hatten wir eigentlich schon ein paar Postings vorher geklärt, dass das so nicht geht ;) "

war jetzt nicht böse gemeint oder so.



muss man denn dieses


Code (perl): (dl )
my $max_buf_size = 3;

unbedingt angeben?

bzw kann man das nicht noch umschreiben.

ich hab irgendwie die aufgabe bekommen, dass die whileschleife so lange laufen soll, bis kein zeichen mehr kommt.
und die if-abfrage funktioniert so auch nicht.

hier mein code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use IO::Socket;
use strict;

my $socket = new IO::Socket::INET (PeerAddr =>'PC110197',PeerPort => 1810) or die "Konnte Socket nicht erstellen: $!\n";
$socket->autoflush(1);
my $ausgabe;

print "Sende ein Client Create zum Server\n";
print $socket "CLIENT CREATE\n";
my $line = getlinefromsocket ($socket);
if ($line eq 'ACK') {
  print "es geht!";
}
elsif ($line eq 'NACK') {
  print "geht nicht!";
}
else {
  print "geht nix!";
}

print "\nSende ein CONNECT zum Server\n";
print $socket "CONNECT\n";
my $line = getlinefromsocket ($socket);
if ($line eq 'ACK') {
  print "es geht!";
}
elsif ($line eq 'NACK') {
  print "geht nicht!";
}
else {
  print "geht nix!";
}

print "\nSende ein DISCONNECT zum Server\n";
print $socket "DISCONNECT\n";
my $line = getlinefromsocket ($socket);
if ($line eq 'ACK') {
  print "es geht!";
}
elsif ($line eq 'NACK') {
  print "geht nicht!";
}
else {
  print "geht nix!";
}

print "\nSende ein END SESSION zum Server\n";
print $socket "END SESSION\n";
my $line = getlinefromsocket ($socket);
if ($line eq 'ACK') {
  print "es geht!";
}
elsif ($line eq 'NACK') {
  print "geht nicht!";
}
else {
  print "geht nix!";
}


$socket->close();

sub getlinefromsocket {
   my $socket = shift;
   my $buffer;
   my $char;
   my $max_buf_size = 3;
   while ( $socket->recv( $char, 1 ) ) {
      last if ( $char eq ' ' );
      $buffer .= $char;
      last if ( length $buffer == $max_buf_size );
#      print $char;
   }
   return $buffer;
}

Code: (dl )
1
2
3
4
5
6
7
8
Sende ein Client Create zum Server
es geht!
Sende ein CONNECT zum Server
es geht!
Sende ein DISCONNECT zum Server
es geht!
Sende ein END SESSION zum Server
es geht!


Aber wenn ich jetzt anstatt CONNECT -> CONECT eingebe (kommt kein ACK, sondern ein NACK), passiert folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
Sende ein Client Create zum Server
es geht!
Sende ein CONNECT zum Server
geht nix!
Sende ein DISCONNECT zum Server
geht nix!
Sende ein END SESSION zum Server
es geht!


es müsste aber anstatt "geht nix" -> "geht nicht" heißen.

das liegt daran, dass ich die 3 bei max_buf_size angeben muss.
und wenn ich da 4 angebe, dann stimmt das mit dem ACK nicht mehr.

siehe folgende ausgabe:
Code (perl): (dl )
1
2
3
4
5
6
7
8
Sende ein Client Create zum Server
geht nix!
Sende ein CONNECT zum Server
geht nicht!
Sende ein DISCONNECT zum Server
geht nix!
Sende ein END SESSION zum Server
geht nix!


wie kann man das denn beheben?

View full thread was ist an der syntax falsch??