问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PHP SOCKET 技术研究

发布网友 发布时间:2022-04-06 01:50

我来回答

1个回答

热心网友 时间:2022-04-06 03:19

今天试着写一个
PHP

C
语言通过socket通讯的程序,看过PHP手册,发现有好几种方式可以建立socket
客户端.
1、通过
fsockopen()
建立socket连接,然后用
用fputs()
发送消息,用
fgets()
接收消息。
2、通过
socket_create()
建立
socket
连接,然后用
socket_send()
or
socket_write()
发送消息,用
socket_recv()
or
socket_read()
发送消息。

很奇怪,我在手册上看到了这样一段话"本扩展模块是实验性的。该模块的行为,包括其函数的名称以及其它任何关于此模块的文档可能会在没有通知的情况下随
PHP
以后的发布而改变。我们提醒您在使用本扩展模块的同时自担风险。"
看来
php4.0
socket通讯还不是完全稳定。
今天我写的客户端要与服务端做两次通讯,我用上面这个方法都写了一个客户端程序,发现当仅仅就一次通讯的时候,也就是PHP客户端发送一次消息,然后接收返回消息,就关闭连接。这两种方法都能正确快速的实现功能,但当做两次通讯时,却有明显的差别,第一种方法第一次通讯特别快就结束了,这个我可以通过服务端的输出看出来,但是第二次通讯要等上好几分钟才能结束,我试了好几次都这样,我不太清楚我的程序哪里出错了,还是这个方式连接就是有问题,但是第二种方法做这两次通讯却很快,正确!完成的非常的。
最后我根据
第二种情况写了一个
class
//////////////////////////////
File
Description
//////////////////////////////////////////
//
Class
Name
:
socket
//
Version
:
V1.0
//
Functional
Outline
:
create
socket,and
send
message
to
server
//
Revision
history
:
2004/12/15
First
version
created
//
Current
:
2004/12/15
Liu
Yongsheng
//////////////////////////////////////////////////////////////////////////////////////////
class
socket{
var
$socket;
//socket
句柄
var
$sendflag
=
">>>";
var
$recvflag
=
"<<<";
var
$response;
var
$debug
=
1;
function
socket($hostname,$port){

$address
=
gethostbyname($hostname);

$this->socket
=
socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

$result
=
socket_connect($this->socket,$address,$port);

if($this->debug
==
1){

if
($result
<
0)
{

echo
"socket_connect()
failed.\nReason:
($result)
"
.
socket_strerror($result)
.
"<br>";

}
else{

echo
"connect
OK.<br>";

}

}
}
function
sendmsg($msg){

socket_write($this->socket,$msg,strlen($msg));

$result
=
socket_read($this->socket,100);

$this->response
=
$result;

if($this->debug
==
1){

printf("<font
color=#CCCCCC>%s
$msg</fon><br>",$this->sendflag);

printf("<font
color=blue>%s
$result</font><br>",$this->recvflag);

}

return
$result;
}
function
close(){

socket_close($this->socket);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 win 7phpstudy 怎样打开socket支持 PHP如何开启socket php怎么创建开启socket服务 如何在linux上添加PHP的socket扩展 php怎么打开socket扩展? java中实现一个简单HashMap(就是自己写一个简单的,不要太复杂); php的数组java如何实现? PHP的算法可以实现大数据分析吗 如何实现一个hashmap c++ 如何设计线程安全的 HashMap hashmap 中 hash 函数怎么是是实现的?还有哪些 hash 的实现方式 HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash hashmap底层是怎么实现的 如何实现线程安全的HashMap 用java,怎么把php数组转换成HashMap或者集合 hashmap有哪些关键技术,是怎么实现的 HashMap内部是如何实现的? in_array 和in 有什么区别呢?in_array 是php的函数吗,in是在mysql中的吗,我不太清楚,哪位高人指点一下 在thinkphp中的&lt;if&gt;condition条件中可以用IN 么? php数组函数in_array() 查找数组值是否存在拜托各位了 3Q php是如何加载扩展的? 如何用PHP实现Socket服务器 什么是socket?PHP如何实现socket通信 php怎么打开socket扩展 php和js区别是什么 PHP与JS之间的区别? php与js哪个更难?两者有何不同? PHP框架和JS框架是同一个概念的东西吗? js中的函数和php中的函数一样吗? js和php 在数组处理上的不同 PHP和JS在循环,条件判断中的不同之处 PHP如何找回密码 zblogPHP后台登录密码忘记了怎么办 如何重置找回phpcms管理员密码 用php,实现忘记密码功能怎么实现的? 找回PHP网站后台密码 我是新手用户注册的PHP登录密码忘记了,怎么找回来 thinkphp 怎么实现用邮件找回密码。新手,求详细 wordpress怎么找回后台密码 网站程序是php+mysql 后台管理密码忘记了,如何修改?