#!/usr/bin/perl -w
# socket_cli.plx
# usage
# socket_cli.plx 同乙個檔案重複執行次數 傳送socket包存放的檔案 [從檔案第幾行開始執行]
use strict;
use io::socket;
use benchmark;
my $addr = '127.0.0.1';
my $port = '40169';
my $for_num = $argv[0] || die "請輸入需要迴圈的次數!/n";
my $f_name = $argv[1] || die "請資料讀入的檔案!/n";
my $next_line = $argv[2] || '0'; #從檔案第幾行開始執行
my($rbuf,$succ_bytes,$recv_bytes,$systime,$time_out,$socket);
my($timesamp1,$timesamp2,$time_run,$file_line,$log_file);
#日誌檔案
#$log_file="./socket_long_".$f_name."log";
$log_file="/dev/null";
open (filelog,">>$log_file") || "open file err! $!";
$time_out = 5;
$sig = sub ;
for (my $i=1;$i<=$for_num;$i++)
chomp $_;
$systime = `date '+%y%m%d %h:%m:%s'`;
chomp $systime;
print filelog "********************===$systime****************************************=/n";
print filelog "執行第 $i 次迴圈(共需執行迴圈 $for_num 次)/n";
print filelog "傳送資料報:/n$_"."/n";
#print filelog $socket "$_";
eval;
$file_line++;
print filelog "已經處理 $f_name 的 $file_line 行記錄/n"
}close $socket;
close filename;
$systime = `date '+%y%m%d %h:%m:%s'`;
print filelog "已經處理檔案$i次迴圈完畢:".$systime."/n"
}close filelog;
轉阻塞socket和非阻塞socket
讀操作 對於阻塞的socket,當socket的接收緩衝區中沒有資料時,read呼叫會一直阻塞住,直到有資料到來才返 回。當socket緩衝區中的資料量小於期望讀取的資料量時,返回實際讀取的位元組數。當sockt的接收緩衝 區中的資料大於期望讀取的位元組數時,讀取期望讀取的位元組數,返回實際讀取的長...
阻塞 非阻塞socket的理解
b 阻塞socket是這樣的 b recv socket1,buf,length 去網絡卡緩衝區讀取socket1的資料,讀到的資料儲存到buf 如果網絡卡緩衝區有1個位元組,就返回1個,有兩個就返回兩個,當然不能超過length 如果網絡卡緩衝區沒有資料,那麼就一直等待,直到有資料可讀 是的,很傻...
socket阻塞與非阻塞
何為阻塞?在以上過程中若連線還沒到來,那麼接受阻塞,程式執行到這裡不得不掛起,cpu轉而執行其他執行緒。在以上過程中若資料還沒準備好,請閱讀會一樣也會阻塞。阻塞式網路io的特點 多執行緒處理多個連線。每個執行緒擁有自己的棧空間並且占用一些cpu時間。每個執行緒遇到外部為準備好的時候,都會阻塞掉。阻塞...