I IO::Socket::INET
bin mit Sockeln wie diese zu erstellen:Perl Socket-Programmierung Probleme nach dem kontinuierlichen Schreib an Buchse
$lsn1 = IO::Socket::INET->new(
PeerAddr => '192.168.0.2',
PeerPort => 1850,
Proto => 'tcp',
Type => SOCK_STREAM
) || die "Can't connect to 192.168.0.2:1850 : $!\n";
$lsn2 = IO::Socket::INET->new(
PeerAddr => '192.168.0.2',
PeerPort = >1852,
Proto => 'tcp',
Type => SOCK_STREAM
) || die "Can't connect to 192.168.0.2:1852 : $!\n";
dann, ich möchte Daten an beiden Buchsen lesen und schreiben, so ist die Reihenfolge:
1. $lsn1->print(msg1); send message 1 to server from $lsn1.
2. $line = <$lsn2>; receive message 2 from server from $lsn2.
3. $lsn2->print(msg3); send message 3 to server from $lsn2.
4. $lsn2->print(msg4); send message 4 to server from $lsn2.
5. $line = <$lsn2>; receive message 5 from server. But it is all zeros! However I can
see the data on wireshark.
alles ist in Ordnung, bis Schritt 5. Nach der Server-Seite erhalten meine Nachricht4 und zurück senden msg5, die Erfassung von $line = <$lsn2>
sein soll, statt sinnvollen Wert erfassen erfassen alle 0s '. Ich benutze wireshark, um zu sehen, was passiert ist, ein RST ACK von meiner Seite wurde gesendet, nachdem der Server mir msg5 geschickt hat.
Eine Funktion im Server empfangen msg4 und senden sofort msg5 zurück. Wenn ich das Senden von msg4 in dieser Funktion loslasse, folgt auf das Senden von msg5 FIN ACK
.
Kann mir jemand sagen, warum RST ACK
passiert? Kann ein Perl-Skript zwei Sockets öffnen und lesen und schreiben, wie ich es getan habe.
Was genau meinen Sie, wenn Sie "alle Nullen" sagen? Erhalten Sie eine leere Zeichenfolge, undef oder tatsächlich eine Reihe von Nullen? – innaM
Überprüfen Sie '$!' (Und '$^E') – mob
" alle Nullen "bedeutet, dass die Zeichenfolge, die ich zum Speichern eingehender Nachricht verwendet habe, leer ist. Ich sehe nur Nullen, weil ich die Zeichenfolge in ein Zeichenfeld packe. – user195678