Sto usando IO::Socket::INET
per creare presa in questo modo:Perl problemi di programmazione presa dopo scrittura continua a presa
$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";
poi, voglio leggere e scrivere dati su entrambe le prese, quindi la sequenza è:
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.
tutto va bene fino a quando il passaggio 5. Dopo che il lato server riceve i miei Message4 e rispedire msg5, che si suppone sia la cattura da $line = <$lsn2>
, invece di cattura valore significativo è catturare tutti 0. Ho usato wireshark per vedere cosa è successo, un ACK RST da parte mia è stato inviato dopo che il server mi ha inviato msg5.
Una funzione nel server ha ricevuto msg4 e restituisce immediatamente msg5. Se si elimina l'invio di msg4 in quella funzione, ciò che segue l'invio di msg5 è FIN ACK
.
Qualcuno può dirmi perché sta accadendo lo RST ACK
? Uno script perl può aprire due socket e leggere e scrivere come ho fatto io.
Cosa intendi esattamente quando dici "tutti gli zeri"? Hai una stringa vuota, undef o in realtà un mucchio di zeri? – innaM
Controllare '$!' (E '$^E') – mob
" tutti gli zeri "significa che la stringa che ho usato per memorizzare il messaggio in arrivo è vuota. Vedo tutti gli zeri perché impacco la stringa nell'array dei caratteri. – user195678