作者decken ()
看板Perl
标题Re: [问题] Socket - Server 和 Client 传讯问题
时间Thu Aug 7 15:51:56 2008
---------Server端程式---------
#!/usr/bin/perl
use strict;
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()) {
my $thrs = threads->create("client_handler", $client); # "client_handler"-执行绪;$client-传入的参数
$thrs->join(); # 结束执行绪
}
sub client_handler {
my $client = shift;
my $msg = '';
$/ = "\n";
while(<$client>) {
chomp;
$_ = "CC ".$_; # 在读进来的每一列开头加上"CC"
$msg .= $_."\n";
}
print $client "$msg"; # 把修改後的资料传回给Client
$client->shutdown(1); # client 停止写入资料
$client->close(); # 关闭 client 的 socket
}
$server->close(); # 关闭 server 的 socket
----------------Client端程式----------------------
#!/usr/bin/perl
use strict;
use IO::Socket;
my $server = IO::Socket::INET->new(
PeerAddr => "127.0.0.1",
PeerPort => 8088
);
open FILE, "< data"
or die "can't open 'data'";
$/ = "\n";
while(<FILE>)
{
print $server $_; #传讯息给 Server 端
}
close FILE;
print "test1\n"; # 这一行有印出
open OUT, "> data.new"
or die "can't open 'data.new'";
while(<$server>)
{
print "test2..."; # 这一行没有印出,所以程式卡在上面那一行
print OUT;
}
close OUT;
print "test3...";
$server->close();
---------------以上程式修改自
LiloHuang------------------------------------
--------------------分隔线-------------------------
Client传完档案後,Server传回修改後的内容(
紫色那一行)
Client等待Server把修改後的内容传回来(
绿色那一行),
但是,程式就一直停在
绿色那一行,
是Client接收不到Server的讯息吗?
找了两天的BUG,昨天已经麻烦
LiloHuang一次,
今天又要来打扰了~
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.208.44
※ 编辑: decken 来自: 203.73.239.220 (08/07 16:06)
※ 编辑: decken 来自: 203.73.239.220 (08/07 16:09)
1F:推 LiloHuang:重点是卡在於你的伺服器不晓得什麽时候传完资料 08/07 16:38
2F:推 LiloHuang:请留意我先前的有使用 \r\n\r\n表示传输完毕 last跳出 08/07 16:38
3F:推 LiloHuang:基本上如果你传输的是二进制资料,建议你在传输前 08/07 17:06
4F:推 LiloHuang:先表明你要传的资料长度有多少 这样比较好计算 :) 08/07 17:06