作为测试开发人员,测试的时候经常需要测试网络数据内容,也就需要模拟服务器返回各种特殊的数据区检验客户端功能正确定、稳定性等等,下面就总结一点模拟服务器返回数据的方法,由于PHP很好用,所以选择了它,当然C++、Python等等也挺好的,PHP下载地址:http://windows.php.net/download/
如果仅仅返回一个字符串,非常简单,用PHP的输出echo就哦了:
这个是最简单的,江读取到的数据直接返回:
Server.php:
但是有时候需要返回数据流,而不是字符串,比如返回数字等等,哪, 使用echo就不行了,它输出的是字符串,数字总是会变成字符而导致不是希望的大小,对PHP用的不是特别熟悉,这个困扰了我一些时间,但是由于PHP比较灵活,还是坚持找一下相关内容,phpbuffer是一个开源的PHP网络处理类库,写的很棒,源码地址是:
http://code.google.com/p/phpbuffer/ ,具体自己看下。
将里边的内容取出来用,就可以实现我们需要的内容:
Lca.php:
<?php
set_time_limit(0);
$ip = '10.129.41.125';
$port = 80;
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0)
{
echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0)
{
echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0)
{
echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do
{
if (($msgsock = socket_accept($sock)) < 0)
{
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;
}
else
{
//服务器端显示一下收到的信息
echo "测试成功了啊\n";
$buf = socket_read($msgsock,1024);//最多显示1024长度的就行了
$talkback = "收到的信息:$buf\n";
echo $talkback;
//发送数据
$post = pack ( 'N', 0x08000000 );
$post .= pack ( 'N', 0x00000000 );
$post .= pack ( 'N', 0x06000000 );
//发送信息协议头
$header = "HTTP/1.1 200 OK\r" . "\n";
// $header .= "Host: localhost\r" . "\n";
$header .= "Accept-Ranges:none" . "\n";
$header .= "Server:nginx/1.4.1\r" . "\n";
$header .= "Content-Length: ". strlen($post) . "\r\n";
$header .= "Content-Type: text/html\r" . "\n";
$header .= "Connection:keep-alive\r" . "\n";
$header .= "\r\n";
//发送出去......
$data = $header . $post;
socket_write($msgsock, $data, strlen($data));
}
socket_close($msgsock);
} while (true);
socket_close($sock);
?>
安装PHP就不说了,在这里下载: http://windows.php.net/download/
然后将安装路径下的php.exe所在的目录添加到系统环境变量里边去:
启动命令行,使用php 启动刚才写的服务端脚本:
激活数据发送请求,看下服务器反应:
服务器发回的数据是:
0x08000000
0x00000000
0x06000000
看下客户端收到的数据:
使用还是很给力的
参考: