作者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
→ LiloHuang:附註, 我用\r\n\r\n表示資料傳輸完畢 08/06 19:23
→ LiloHuang:這份程式跟上面的作業幾乎相同的目的 稍作修改即可達成 08/06 19:24
※ 編輯: LiloHuang 來自: 140.114.71.40 (08/06 22:59)
推 decken:感謝LiloHuang的教學,正在努力研究中!! 08/07 01:28