Re: [問題] Socket - Server 和 Client 傳訊問題

看板Perl作者時間17年前 (2008/08/07 15:51), 編輯推噓4(400)
留言4則, 1人參與, 最新討論串3/4 (看更多)
---------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)

08/07 16:38, , 1F
重點是卡在於你的伺服器不曉得什麼時候傳完資料
08/07 16:38, 1F

08/07 16:38, , 2F
請留意我先前的有使用 \r\n\r\n表示傳輸完畢 last跳出
08/07 16:38, 2F

08/07 17:06, , 3F
基本上如果你傳輸的是二進制資料,建議你在傳輸前
08/07 17:06, 3F

08/07 17:06, , 4F
先表明你要傳的資料長度有多少 這樣比較好計算 :)
08/07 17:06, 4F
文章代碼(AID): #18cgcTva (Perl)
文章代碼(AID): #18cgcTva (Perl)