【问题标题】:Socket send data entered in Terminal在终端中输入的套接字发送数据
【发布时间】:2016-10-29 12:33:59
【问题描述】:
我想创建一个 Socket 来监听连接并将我在终端中输入的数据(想使用 php script.php 运行它)发送给所有客户端
还有什么方向吗?
最好的问候,
杰克
【问题讨论】:
-
对于 PHP 中的 websockets,最好使用已经完成的东西。看看 Ratchet socketo.me 它是一个 websockets 库。
标签:
php
linux
sockets
terminal
【解决方案1】:
此脚本执行您想要的操作,还将客户端发送的数据写入您的终端,使用 php script.php 运行:
<?php
$port = 12345;
$server = stream_socket_server("tcp://localhost:$port", $errno, $errstr);
if (!$server) die("$errstr (errno $errno)\n");
$s = array(STDIN, $server); // initially wait for terminal input or connections
while ($r = $s and stream_select($r, $n=NULL, $n=NULL, NULL))
foreach ($r as $stream)
if ($stream == STDIN) // terminal input
{
$data = fgets(STDIN);
foreach (array_slice($s, 2) as $client) // clients from index 2 on
fputs($client, $data);
}
else
if ($stream == $server) // new client
$s[] = stream_socket_accept($server, -1); // add it to $s (index 2 on)
else // data from a client
if (!fputs(STDOUT, fgets($stream)))
{
fclose($stream);
array_splice($s, array_search($stream, $s), 1); // remove client
}
?>
【解决方案2】:
以下程序将帮助您发送和接收数据。
error_reporting(E_ALL | E_STRICT);
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$from = *Destination IP*;
$port = 50001;
$msg = "@SET0123014002";
$len = strlen($msg);
//for sending message
socket_sendto($socket, $msg, 0, 0, $from, $port);
print "Time: " . date("%r") . "\n";
socket_close($socket);
echo "$msg and $len was Sent<br>";
$socket1 = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
//to Receive data from terminal.
socket_bind($socket1, '*Your System IP*', 50001);
socket_recvfrom($socket1, $buf, 12,0, $from, $port);
echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;