作者LiloHuang (相见不如怀念)
看板Perl
标题Re: [问题] Socket - Server 和 Client 传讯问题
时间Sat Aug 9 20:53:17 2008
稍做修改可以申明长度使用,这份程式码还有值得改善的两个小问题
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
1F:推 decken:一旦决定档案传输的长度後,判断传输结束就容易多了... 08/10 16:02
2F:→ decken:真是太感谢LiloHuang了.....科科! 08/10 16:02