<?PHP
 set_time_limit(0); 
         $InfoStr= "LOGIN\r\n"; 
 error_reporting(E_ALL);
 $service_port=2017;
 $address="192.168.1.31";
 $socket=socket_create(AF_INET,SOCK_STREAM,0);
  
$result=socket_connect($socket,$address,$service_port);

 socket_write($socket,$InfoStr,strlen($InfoStr));
 
while( $out=socket_read($socket,1024)) 
 {
echo $out;
 }
 
?> 
请问 这段代码在第一个PHP文件里面执行正常 服务端也能收到"LOGIN"的消息
在下一个页面中 调用另外一个PHP文件中 全部代码都一样 只是"LOGIN"变成了"FIND" 服务端就收不到消息了 
但是也没有提示Socket创建失败的信息 都是正常的是什么原因啊 我找了好几天了 对PHP不熟悉 实在是找不出原因了 谢谢帮忙

解决方案 »

  1.   

    可能你的服务器,必须先login.才能用其它的命令,服务器上你加的跟踪代码位置看对不对
      

  2.   

    socket 通讯需要有服务器端和客户端,你这只是客户端
      

  3.   


    是只有客户端 服务端不是php编写的
      

  4.   

    是不是服务端接收到的字符串只有是LOGIN才处理,否则根本就没处理啊
      

  5.   


    确定不是 如果把FIND放在首次调用 也是没有问题的 然后界面跳转 再调用就不可以了 好像只能创建一个连接实例 在netstat -a里面 每次进到第二个页面 会出现一个新的监听2017的端口 
      

  6.   

    先Login以后 新页面出来了 但是Find 服务端就不响应了
      

  7.   

    问题暂时解决了 我是用post打开第二个页面的 为了测试方便 在第二个页面 我没有使用表单的数据 而是直接使用了FIND字符串 于是php就不发送数据给服务端了 等改用正常的post值 就一切正常了 莫名其妙 我不知道原理 晚上结帖 希望有朋友给我解释解释这个具体是什么原因 
      

  8.   

    我都是用fsockopen,处理完后,关闭。
    不知道是不是你没有关闭socket连接,服务器那不支持长连
      

  9.   

    看上去和SERVER端对CLIENT端的处理策略有关系,比如连接数限制;这种情况可以考虑在第一个PHP脚本的最后使用socket_close主动断开连接
      

  10.   


    虽然不知道原因 但是已经确认了 post过来的信息没有被使用的情况下 socket_write的操作就不正常 具体什么原因不知道