- 締切済み
IO-Socketで…
最初に開かれた1つのソケットで、 サーバーから不定期に送られてくるデータを処理→表示しつつ、 ユーザーから入力があった場合にそのソケットへ送信するといったメッセンジャーを作ろうと思っているのですが、「入力待ちと受信待ちを同時に進める」という事がどうも上手くいってくれません… use threads;を使い、送信用・受信用と分けたのですが、やはりどちらか一方が止まってしまいます…。 どの様に書いたらよいのでしょうか… 何方かご教授下さい…。 use threads; use IO::Socket; ($test_socketを生成) sub send{ while($input = <STDIN>){ chomp($input); print $test_socket "$input"; } sub recv{ while(1){ if($receive = <$test_socket>){ print "$receive\n"; } } } my $sendthread = threads->new(\&send); $sendthread->join(); my $recvthread = threads->new(\&recv); $recvthread->join();
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- onosuke
- ベストアンサー率67% (310/456)
あのー,joinの意味解って使ってます? 「同時に進めたい」という意思とthreads::join()の動作が相反してますよ。 my $sendthread = threads->new(\&send); $sendthread->join(); ←送信スレッドの終了まで"待つ!!" my $recvthread = threads->new(\&recv);
補足
PCの故障でお返事が遅れ申し訳ありません・・・。 何を思ったのか、ここに書くときに交互に書いてしまったようです。 実際は2段ずつで書かれているのですが・・・。すみません・・・。 送信スレッド・受信スレッドの2つを立て動かしたのですが、パケットキャプチャで見ていたところ、送信スレッドで送信動作をしても、受信スレッドで何かのデータを受信しないとprint $socket・・・で送信されてくれません。バッファリングの問題でしょうか…