免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4331 | 回复: 3
打印 上一主题 下一主题

socket文件传输,客户端写文件速度特别慢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-22 10:11 |只看该作者 |倒序浏览
注:虽然用php写的,但是原理应该是一样的,因为这个板块高手比较多,所以发到这个上面了,比较着急用,请各位帮帮忙

我用php写了server和client程序,我要从server接收文件handle,然后再client写文件,但是在client写文件的时候,一个1k不到的文件要写2分钟左右,高手帮我看看,是什么原因
付程序[第一次,罗嗦的地方请帮忙告诉一下,如果有类似的例子也可以,我去自己看,谢谢各位了]
<?php
// Set time limit to indefinite execution
set_time_limit (0);

// Set the ip and port we will listen on
#$address = '172.30.6.110';
$address = '192.168.11.4';
$port = 9200;


// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);



$val_source_dir = "D:/php4/webapp/file";
$val_input_file_pattern = "/sample*/";

//得到要传输的文件列表
$has_file_list = r25_get_file_list($val_source_dir,$val_input_file_pattern);

foreach($has_file_list as $val_file){
   $clientHandle = socket_accept($sock);
   echo "file name:".$val_file."\n";
   $output = getFileContent($val_file);
   socket_write($clientHandle,$output);

   do {
       if (false === ($buf = socket_read($clientHandle, )) {
           echo "socket_read() failed: reason: " . socket_strerror($clientHandle) . "\n";
           break;
       }
       if ($buf == 'ok') {
           break;
       }
   } while (true);
       //
        

       printf ("<<<<<<<<<<<<< %s >;>;>;>;>;>;>;>;>;>;>;>;>;\n",$val_file);
            
            
socket_close($clientHandle);
}


// Close the master sockets
socket_close($sock);


function getFileContent($val_file) {
$file_content = file_get_contents ($val_file);
echo ">;>;>;>;>;>;>;>;>;>;>;>;>;".filesize ($val_file)."<<<<<<<<<<<<<<\n";
return $file_content;
}

?>;

客户端:
<?
define("INPUT_PATH","D:\php4\webapp\clientIn";

$i = 0;
while (true) {

   $address = '192.168.11.4';
   $port = 9200;

   $i ++;
   $read_handle = fsockopen($address, $port, $errno, $errstr,2);
   if (!$read_handle) {
       echo "$errstr ($errno)<br />;\n";
   } else {
        if (writeFile($read_handle, $i ) == true) {
           $out = "ok";
           fputs($read_handle, $out,strlen($out));
        } else {
           echo "faile restart send\n";
           $out = "ng";
           fputs($read_handle, $out,strlen($out));
        }
         fclose($read_handle);
   }


}



function writeFile($read_handle, $index) {

$filename = "\sample_".$index;

$filewrite = fopen(INPUT_PATH."$filename","wb";

while (!feof ($read_handle)) {
    $buffer = fgets($read_handle, 4096);
if (fwrite($filewrite, $buffer) == false) {
print "not write $filename\n";
return false;
}
}


fclose($filewrite);
return true;
}

?>;

论坛徽章:
0
2 [报告]
发表于 2005-07-22 10:45 |只看该作者

socket文件传输,客户端写文件速度特别慢

我找到办法了,我重新设定了客户端的缓冲区的大小
速度就变快了,但是不知道算不算正确地解决办法

论坛徽章:
0
3 [报告]
发表于 2005-07-22 12:04 |只看该作者

socket文件传输,客户端写文件速度特别慢

我弄错了,加上那个缓冲没有作用,是因为我在client write从server的数据之前,我先发给server端一个"ok"的字符,这个字符导致了server继续读取下一个文件,如果我的原意是等客户端写完了这个数据以后,才希望服务器发下一笔数据过来,最先发的就是这个意思,但是却需要等很长的时间
不知道为什么

论坛徽章:
0
4 [报告]
发表于 2005-07-22 15:51 |只看该作者

socket文件传输,客户端写文件速度特别慢

up
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP