PHP的socket编程问题

predict 2011-07-12 01:40:58

<?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不熟悉 实在是找不出原因了 谢谢帮忙
...全文
275 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyzy_yy_pm 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 predict 的回复:]

引用 11 楼 kyzy_yy_pm 的回复:

引用 9 楼 predict 的回复:

引用 8 楼 kyzy_yy_pm 的回复:

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


确定不是 如果把FIND放在首次调用 也是没有问题的 然后界面跳转 再调用就不可以了 好像只能创建一个连接实例 在netstat -a里面 每次进到第二个页面 会出现……
[/Quote]
这个不难,这要每次判断指定接口是否被占用,没被占用就分配
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kyzy_yy_pm 的回复:]

引用 9 楼 predict 的回复:

引用 8 楼 kyzy_yy_pm 的回复:

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


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

每次的端口都要换,而……
[/Quote]这个很难实现吧
kyzy_yy_pm 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 predict 的回复:]

引用 8 楼 kyzy_yy_pm 的回复:

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


确定不是 如果把FIND放在首次调用 也是没有问题的 然后界面跳转 再调用就不可以了 好像只能创建一个连接实例 在netstat -a里面 每次进到第二个页面 会出现一个新的监听2017的端口
[/Quote]
每次的端口都要换,而却服务端和客户端保持一致
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 craboy1 的回复:]

可能你的服务器,必须先login.才能用其它的命令,服务器上你加的跟踪代码位置看对不对
[/Quote]
先Login以后 新页面出来了 但是Find 服务端就不响应了
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kyzy_yy_pm 的回复:]

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

确定不是 如果把FIND放在首次调用 也是没有问题的 然后界面跳转 再调用就不可以了 好像只能创建一个连接实例 在netstat -a里面 每次进到第二个页面 会出现一个新的监听2017的端口
kyzy_yy_pm 2011-07-12
  • 打赏
  • 举报
回复
是不是服务端接收到的字符串只有是LOGIN才处理,否则根本就没处理啊
蝜蝂 2011-07-12
  • 打赏
  • 举报
回复
不懂php
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuzuning 的回复:]

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

是只有客户端 服务端不是php编写的
xuzuning 2011-07-12
  • 打赏
  • 举报
回复
socket 通讯需要有服务器端和客户端,你这只是客户端
craboy1 2011-07-12
  • 打赏
  • 举报
回复
可能你的服务器,必须先login.才能用其它的命令,服务器上你加的跟踪代码位置看对不对
liangjamy 2011-07-12
  • 打赏
  • 举报
回复
ding
predict 2011-07-12
  • 打赏
  • 举报
回复
自己顶
predict 2011-07-12
  • 打赏
  • 举报
回复
自己顶
predict 2011-07-12
  • 打赏
  • 举报
回复
结帖了了了了
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lazysmile 的回复:]

看上去和SERVER端对CLIENT端的处理策略有关系,比如连接数限制;这种情况可以考虑在第一个PHP脚本的最后使用socket_close主动断开连接
[/Quote]
不是这个原因 每个脚本调用的都是同一个操作类 在类里面 写入完成后 就自行断开了
predict 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 a82168506 的回复:]

客户端去连接服务端。
每个客户端连接的时候,都会在服务端产生一个链接对象。
你这个需要服务端配合你一起查找问题。
首先看下你第二个客户端有没有连上他的服务器。
[/Quote]

虽然不知道原因 但是已经确认了 post过来的信息没有被使用的情况下 socket_write的操作就不正常 具体什么原因不知道
lazysmile 2011-07-12
  • 打赏
  • 举报
回复
看上去和SERVER端对CLIENT端的处理策略有关系,比如连接数限制;这种情况可以考虑在第一个PHP脚本的最后使用socket_close主动断开连接
ourbiz 2011-07-12
  • 打赏
  • 举报
回复
定ding
只要开心就好 2011-07-12
  • 打赏
  • 举报
回复
客户端去连接服务端。
每个客户端连接的时候,都会在服务端产生一个链接对象。
你这个需要服务端配合你一起查找问题。
首先看下你第二个客户端有没有连上他的服务器。
seared2008 2011-07-12
  • 打赏
  • 举报
回复
可能是数据没有接受完吧,处于等待状态。
加载更多回复(2)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧