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

看板Perl作者 (相見不如懷念)時間17年前 (2008/08/09 20:53), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串4/4 (看更多)
稍做修改可以申明長度使用,這份程式碼還有值得改善的兩個小問題 1. Server 不要用斷線來讓 Client 知道收完了 2. 判斷長度的字串可能後面帶有原本要傳輸的資料,要做移動 # ====================== 我是分隔線 ====================== # # Server 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); } my $len; if($msg=~/^Content-Length: (\d+)\r\n\r\n$/) { read($client, $msg, $1); print $client "$msg modify"; $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 ); my $str = 'THIS IS MY DATA'; my $len = length $str; print $client "Content-Length: $len\r\n\r\n"; print $client $str; while(<$client>) { print; } $client->close(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.71.40

08/10 16:02, , 1F
一旦決定檔案傳輸的長度後,判斷傳輸結束就容易多了...
08/10 16:02, 1F

08/10 16:02, , 2F
真是太感謝LiloHuang了.....科科!
08/10 16:02, 2F
文章代碼(AID): #18dPC_lm (Perl)
文章代碼(AID): #18dPC_lm (Perl)