麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
socket程序问题。请做过或有经验的来指点
悬赏分:20 - 2007年08月21日

socket程序问题。请做过或有经验的来指点
我在写一个php连接socket主机的聊天室,socket server是pvpgn,暴雪游戏(俗称bn。暂时支持星际争霸)
www.cnbattle.com

代码用php手册的socket例子。

程序 连接和发言都没有问题,但是在socket_read的时候,程序就一直在read server的数据,尽管server没有发言。

有什么办法或者用什么参数能使read 函数不要一直获得数据?

或者页面刷新后,能继续使用这个socket连接而不必再次连接server验证身份?

程序尝试过用非阻塞方式,但是连不上server。更别说read和write了。

用其他的,比如fopen 或者 fsocket等方法都是一样,程序一直在read server段的数据。

大家也可以试一下下面的程序,可能需要另外注册帐号,注册帐号地址在:ww1.cnbattle.com/reg.php

请做过类似socket或有经验的来指点,谢过了!

[php]
<?
error_reporting(E_ALL);

echo "

TCP/IP Connection

\n";

/* Get the port for the WWW service. */
$service_port = 6112;//getservbyname('www', 'tcp'); 服务器端口 6112

/* Get the IP address for the target host. */
$address = gethostbyname('cnbattle.com');

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
} else {
echo "OK.\n";
}

echo "Attempting to connect to '$address' on port '$service_port'...";


$time = time();
$timeout = 15;
while (!@socket_connect($socket, $address, $service_port))
{
$err = socket_last_error($socket);
if ($err == 115 || $err == 114)
{
if ((time() - $time) >= $timeout)
{
socket_close($socket);
die("Connection timed out.\n");
}
sleep(1);
continue;
}
die(socket_strerror($err) .$err. "\n");
}

/*
$result = socket_connect($socket, $address, $service_port);

if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
} else {
echo "OK.\n";
}
*/
$in = chr(03).chr(04)."lunamxf".chr(13)."1234".chr(13).chr(13);//提交身份 lunamxf是帐号 1234是密码
$out = '';

echo "Sending BN HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";

echo "Reading response:\n\n";
$i=1;
while ($out = socket_read($socket, 2048)) { //没有数据的时候程序一直在这里read
echo ($i++).nl2br($out);
}

echo "Closing socket...";
socket_close($socket);
echo "OK.\n\n";
?>
[/php]

提问者:mxflg   08-21 16:04
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
59 + 78 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM