作者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)
推 LiloHuang:重點是卡在於你的伺服器不曉得什麼時候傳完資料 08/07 16:38
推 LiloHuang:請留意我先前的有使用 \r\n\r\n表示傳輸完畢 last跳出 08/07 16:38
推 LiloHuang:基本上如果你傳輸的是二進制資料,建議你在傳輸前 08/07 17:06
推 LiloHuang:先表明你要傳的資料長度有多少 這樣比較好計算 :) 08/07 17:06