Re: [問題] Socket - Server 和 Client 傳訊問題
稍做修改可以申明長度使用,這份程式碼還有值得改善的兩個小問題
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
08/10 16:02, 2F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章