PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
Perl
[請益] Perl socket nonblocking I/O
作者:
xatier
(一切重來就好了...)
2012-05-09 04:37:58
最近想嘗試一下 Perl 的網路程式設計
寫了以下的支援多人連線的 echo 程式
#!/usr/bin/perl
use 5.012;
use strict;
use warnings;
use Term::Cap;
use IO::Socket::INET;
$|++;
my $listener = IO::Socket::INET->new(LocalPort => 3126,
Listen => 5,
Proto => 'tcp',
Reuse => 1,
Blocking => 0,) or die "Cannot create
socket\n";
$listener->autoflush(1);
while (1) {
next unless my $client = $listener->accept();
defined (my $child = fork()) or die "fork error: $!";
if ($child == 0) {
$listener->close();
ctd ($client);
exit 0;
}
$client->close();
}
sub ctd {
my ($socket) = @_;
my $data;
$socket->send ("Hi> ");
while (sysread($socket, $data, 1) == 1) {
#print $data;
$socket->send ("$data");
$socket->send ("\r\nHi> ") if ($data =~ '\n');
last if ($data eq 'q');
}
$socket->close();
}
====================================
目前想做一點改進
有辦法讓這個程式的 I/O 變成 non-blocking 的嗎?
想要做到 client 這邊輸入東西不用按下 Enter 送出 server 端就可以抓到 socket 送
來的 keyboard input
想做一些簡單的互動遊戲XDD
麻煩了 <(_ _)>
作者:
scwg
( )
2012-05-09 06:19:00
你想消除的 "blocking" 感覺是 client 端讀 console 的 linebuffer 耶, 把 client 改過這個 server 應該不用動.
作者:
kornelius
(c9s)
2012-05-10 14:15:00
建議用 AnyEvent::Socket :-)
作者:
xatier
(一切重來就好了...)
2012-05-11 03:33:00
@scwg: 那要怎麼做到像 BBS 這樣可以即時響應的功能呢@@@kornelius: 感謝,我試試看!成功囉~ 感謝!
http://paste.ubuntu.com/987494/
http://paste.ubuntu.com/987472/
基本的 IO 都做好囉 :D
繼續閱讀
[問題] 可以用#ifdef嗎
sixth
Re: [問題] 關於socket 與 linux nc的問題
saiamoi
Re: [問題] 關於socket 與 linux nc的問題
DarkKiller
[問題] 關於socket 與 linux nc的問題
saiamoi
Re: [問題] array reference
DarkKiller
Re: [問題] array reference
DarkKiller
Re: [問題] array reference
abliou
Re: [問題] array reference
l10nel
[問題] 記憶體使用量
ncuatm
[問題] array reference
cutecpu
Links
booklink
Contact Us: admin [ a t ] ucptt.com