看板 Perl 關於我們 聯絡資訊
---------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