![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
相关问题
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
答复

