我正在用 PHP 制作一个 MSN 客户端。我有这段代码,它连接到服务器并登录到 MSN:
$server2 = explode(":", $xfr[3]);
$socket2 = pfsockopen($server2[0], (int)$server2[1]);
$_SESSION["socket"] = $socket;
echo '<b>Connected to 2nd server.</b><br />';
//Send MSNP version
fputs($socket2, "VER 0 MSNP10 CVR0\r\n");
echo fread($socket2, 5000) . '<br />';
//Send user-agent
fputs($socket2, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n");
echo fread($socket2, 5000) . '<br />';
//Send username
fputs($socket2, "USR 2 TWN I ".$_POST["username"]."\r\n");
//Read USR
$usr = fread($socket2, 5000);
echo $usr . '<br />';
$usr = explode(" ", $usr);//This is for later usage.
现在我需要在另一个页面(AJAX/status.php
)中使用这个套接字。php.net 说连接保持可用。但是,这是通过 AJAX 调用的 status.php(只需忽略 $_SESSION["cid"]):
<?php
session_start();
fputs($_SESSION["socket"], "CHG 12 " . $_GET["s"] . " " . $_SESSION["cid"], 5000);
echo fread($_SESSION["socket"]);
这应该改变状态。我收到此错误:
<br />
<b>Warning</b>: fputs(): supplied argument is not a valid stream resource in <b>C:\wamp\apps\msnphp\AJAX\status.php</b> on line <b>3</b><br />
<br />
<b>Warning</b>: Wrong parameter count for fread() in <b>C:\wamp\apps\msnphp\AJAX\status.php</b> on line <b>4</b><br />
我的套接字是持久的,它的 id 保存在会话变量 $_SESSION["socket"] 中。我不明白为什么它不起作用。
我使用 Windows XP Professional SP2 作为服务器,带有 WAMP(Apache、MySQL 和 PHP)服务器。
谁能帮我?谢谢!