作者LiloHuang (相见不如怀念)
看板Perl
标题Re: [问题] Socket - Server 和 Client 传讯问题
时间Wed Aug 6 19:21:43 2008
Socket Programming 有很多种方式可以去写 Server 的部份,
但是要能够多人连上去无非是以下两个精神去做
1. fork child process or create threads
2. select based event trigger ( I/O Multiplexing )
如果要写的更有趣的话可以配合 non blocking 甚至 asynchronous I/O 的作法
但是基於这个看板是 Perl 板,我就简单的用IO::Socket模组配合开thread来示范
# ====================== 我是分隔线 ====================== #
# Server 端的程式码
#!/usr/bin/perl
use threads;
use IO::Socket;
my $server = IO::Socket::INET->new(
LocalPort => 8088,
Type => SOCK_STREAM,
Listen => 32,
Reuse =>1
);
while(my $client = $server->accept()) {
threads->create("client_handler", $client);
}
sub client_handler {
my $client = shift;
my $msg = '';
while(<$client>) {
$msg .= $_;
last if($msg=~/\r\n\r\n$/s);
}
print $client "modify $msg";
$client->shutdown(1);
$client->close();
}
# ====================== 我是分隔线 ====================== #
# Client 端的程式码
#!/usr/bin/perl
use IO::Socket;
my $client = IO::Socket::INET->new(
PeerAddr => "127.0.0.1",
PeerPort => 8088
);
print $client "HIHI THIS IS MY TEXT\r\n\r\n";
while(<$client>) {
print;
}
$client->close();
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.71.40
1F:→ LiloHuang:附注, 我用\r\n\r\n表示资料传输完毕 08/06 19:23
2F:→ LiloHuang:这份程式跟上面的作业几乎相同的目的 稍作修改即可达成 08/06 19:24
※ 编辑: LiloHuang 来自: 140.114.71.40 (08/06 22:59)
3F:推 decken:感谢LiloHuang的教学,正在努力研究中!! 08/07 01:28