Re: [問題] Socket - Server 和 Client 傳訊問題

看板Perl作者 (相見不如懷念)時間17年前 (2008/08/06 19:21), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/4 (看更多)
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

08/06 19:23, , 1F
附註, 我用\r\n\r\n表示資料傳輸完畢
08/06 19:23, 1F

08/06 19:24, , 2F
這份程式跟上面的作業幾乎相同的目的 稍作修改即可達成
08/06 19:24, 2F
※ 編輯: LiloHuang 來自: 140.114.71.40 (08/06 22:59)

08/07 01:28, , 3F
感謝LiloHuang的教學,正在努力研究中!!
08/07 01:28, 3F
文章代碼(AID): #18cOb9wd (Perl)
文章代碼(AID): #18cOb9wd (Perl)