云迈博客

您现在的位置是:首页 > 后端开发 > PHP > 正文

PHP

用php进行socket通讯

吴俊2021-01-30PHP344
基于TCP上的。有个服务端创建了tcp的连接,然后客户端可以和服务端云运行的那个连接进行通讯。而服务端可以监听到客户端的请求,如发送信息。服务端这个时候也可以再响应数据回去。服务端的代码:serv

基于TCP上的。有个服务端创建了tcp的连接,然后客户端可以和服务端云运行的那个连接进行通讯。而服务端可以监听到客户端的请求,如发送信息。服务端这个时候也可以再响应数据回去。
服务端的代码:
service.php
<?php

$host = ‘127.0.0.1’;//ip地址,这里是本地的
$port =’2008’;//端口号
$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//创建一个socket,还不能用
if($sock < 0){
echo “socket_create() 失败的原因”.socket_strerror(socket_last_error($sock));
}
//将地址和端口绑定到刚创建的socket中
if($bind = socket_bind($sock,$host,$port)<0){
echo “socket_create() 失败的原因”.socket_strerror(socket_last_error($bind));
}
//进行监听,设置的数量是4个
if($listen = socket_listen($sock,4) <0){
echo “socket_create() 失败的原因”.socket_strerror(socket_last_error($listen));
}
$count = 5;//设置五次访问次数
do{
$accept = socket_accept($sock);//另一个Socket来处理通信
if($accept<0){
echo “socket_accept()失败的原因”.socket_strerror(socket_last_error($accept));
break;
}else{
$buf = socket_read($accept,8192);//读取客户端传送的数据
$response=’you send message is:’.$buf;
//将信息返回给客户端,第三个参数是返回的长度
$res = socket_write($accept,$response,strlen($response));
if($res !==false){
echo ‘send message to client is successful’;
}
if($count–<=0){
break;
}
}
socket_close($accept);
}while(true);
socket_close($sock);

这个service.php文件应该是通过命令行的形式运行,即php service.php start。如果php命令不可以用,那么就需要在环境变量path那边配置一些你的php信息。先运行service.php,再去访问client.php文件。服务端接受5次请求就会自动关闭,代码上已经实现。

client.php客户端的程序

<?php

error_reporting(E_ALL);
set_time_limit(0);
$host = ‘127.0.0.1’;
$port = ‘2008’;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if ($socket < 0) {
echo “socket_create() failed: reason: “ . socket_strerror($socket) . “\n”;
}
$result = socket_connect($socket, $host, $port);//连接服务端创建的接口
if ($result < 0) {
echo “socket_connect() failed.\nReason: ($result) “ . socket_strerror($result) . “\n”;
}else {
echo “连接 ‘$host’ 端口 ‘$port’.’成功’.\n”;
}
$input = ‘hello world’;
if(!socket_write($socket, $input, strlen($input))) {//向服务端写数据
echo “socket_write() failed: reason: “ . socket_strerror($socket) . “\n”;
}else {
echo “发送到服务器信息的内容为”.$input;
}
while($output = socket_read($socket, 8192)) {//读取服务端响应的数据
echo “接受的内容为:”,$output;
}
socket_close($socket);
echo “关闭成功\n”;

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~