centos下php socket连接,该如何解决
程序员文章站
2024-04-02 23:05:04
...
centos下php socket连接
最近要做一个基于tcp/ip下的短连接
我们自己的代码使用的是php的socket连接,对方服务器,已经测试能够连接,并接收到对方传回来的数据;
现在要求我们自己也需要搭建一个socket服务器,要求对方也可以连接我们服务器,获取相关数据。
以前没有做个socket连接,刚刚接触
服务器也已经设置了一个端口好,可以telnet访问
看网络很多关于socket的php介绍,一些例子也使用了,服务器端的文件,总是不能被访问返回数据
有朋友做个这方面的吗?
帮忙一下
怎么写服务器端文件,怎么实时监听到该socket端口有socket请求,并返回数据个对方
谢谢了
------解决方案--------------------
是的,端口被打开了就不能复用
所以通讯时需要先打开一个周知的端口,一旦监听到该端口有信息时
就需要打开一个空闲端口,并将该端口通知对方,用于后续的通讯
服务方的主监听程序需要常驻内存,只能启动一次
通讯是通过子进程进行的
需要注意的是:php 适合做客户端,而不适合做服务端
可能以后更高的版本会有所改变,至少在php5.5也还是没有改变(虽然已经列入开发计划)
------解决方案--------------------
如果你需要xml进行通信的话,webservice就是最好的选择。你可以了解一下webservice,比如soap。你只要开放webservice对方调用就可以,而且对方可以是任何语言或程序。
------解决方案--------------------
楼主要的东西其实就是RPC,我有一个,你可以直接拿去用,
https://github.com/walkor/workerman
开发文档在:http://www.workerman.net/documentation
安装部署开发都非常方便。
如果有啥不明白,可以随时联系我
------解决方案--------------------
最近要做一个基于tcp/ip下的短连接
我们自己的代码使用的是php的socket连接,对方服务器,已经测试能够连接,并接收到对方传回来的数据;
现在要求我们自己也需要搭建一个socket服务器,要求对方也可以连接我们服务器,获取相关数据。
以前没有做个socket连接,刚刚接触
服务器也已经设置了一个端口好,可以telnet访问
看网络很多关于socket的php介绍,一些例子也使用了,服务器端的文件,总是不能被访问返回数据
有朋友做个这方面的吗?
帮忙一下
怎么写服务器端文件,怎么实时监听到该socket端口有socket请求,并返回数据个对方
谢谢了
------解决方案--------------------
是的,端口被打开了就不能复用
所以通讯时需要先打开一个周知的端口,一旦监听到该端口有信息时
就需要打开一个空闲端口,并将该端口通知对方,用于后续的通讯
服务方的主监听程序需要常驻内存,只能启动一次
通讯是通过子进程进行的
需要注意的是:php 适合做客户端,而不适合做服务端
可能以后更高的版本会有所改变,至少在php5.5也还是没有改变(虽然已经列入开发计划)
------解决方案--------------------
如果你需要xml进行通信的话,webservice就是最好的选择。你可以了解一下webservice,比如soap。你只要开放webservice对方调用就可以,而且对方可以是任何语言或程序。
------解决方案--------------------
楼主要的东西其实就是RPC,我有一个,你可以直接拿去用,
https://github.com/walkor/workerman
开发文档在:http://www.workerman.net/documentation
安装部署开发都非常方便。
如果有啥不明白,可以随时联系我
------解决方案--------------------
//server.php
set_time_limit(0);
// Set up our socket
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, '192.168.10.224', 50004);
socket_listen($socket,5);
// Initialize the buffer
$buffer = "";
while(true)
{
$run=file_get_contents("./run.txt");
if($run==0)break;
// Accept any connections coming in on this socket
$connection = socket_accept($socket);
printf("Socket 链接中\r\n");
// Check to see if there is anything in the buffer
if($buffer != "")
{
printf("写入开始 缓冲区内容发送..\r\n");
socket_write($connection, $buffer . "\r\n");
printf("写入结束 \r\n");
}
else
{
printf("缓冲区无数据\r\n");
}
// Get the input socket_read($connection, 1024)
while($data = socket_read($connection, 4096))
{
if($run==0)break;
$buffer = $data;
//写入客户端数据
file_put_contents("./txt.txt", json_encode($data)."\n",FILE_APPEND);
socket_write($connection, "Information Received\r\n");
printf("读结束 缓冲区内容: " . $buffer . "\r\n");
}
socket_close($connection);
printf("关闭 socket\r\n\r\n");
}
//命令行里 输入: php server.php
//client.php 直接浏览器访问
$stime = microtime(true);
$fp = stream_socket_client("tcp://192.168.10.224:50004", $errno, $errstr, 30,STREAM_CLIENT_CONNECT
------解决方案--------------------
STREAM_CLIENT_PERSISTENT);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
fwrite($fp,$msg,mb_strlen($msg));
echo fread($fp, 4096)."\n";
fclose($fp);
}
$etime = microtime(true);
echo "Time: " . ($etime - $stime) . "n";
//我目前杀掉占用端口太麻烦,直接用文件控制退出 。run.txt 文件存 0或1
相关文章
相关视频
推荐阅读
-
centos下php socket连接,该如何解决
-
CentOS下php使用127.0.0.1不能连接mysql的解决方法
-
CentOS下php使用127.0.0.1不能连接mysql的解决方法
-
公司接了一个PHP的项目,准备选一套开源的Framework,牛人给推荐一下,该如何解决
-
php中的socket_write能不能直接发送16进制的数据,该如何解决
-
PHP socket 发到指定的地址,该如何解决
-
php连接Oracle,提示Call to undefined function Ora_Logon(),该如何解决
-
公司接了一个PHP的项目,准备选一套开源的Framework,牛人给推荐一下,该如何解决
-
php连接Oracle,提示Call to undefined function Ora_Logon(),该如何解决
-
公司接了一个PHP的项目,准备选一套开源的Framework,牛人给推荐一下,该如何解决