问题标签 [php-socket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2470 浏览

php - 如何在 PHP 中向套接字发送控制字符?

在我正在编写的 PHP 脚本中,我需要将 control+z 字符发送到我之前创建的网络套接字。我知道 ctrl+z 字符是 chr(26),所以在我发送的字符串的末尾我添加了一个新行 (\r\n),然后是 chr(26),如下所示:

可悲的是,这并没有像我希望的那样发送 Ctrl+Z。

问候,

乔恩

0 投票
1 回答
2226 浏览

php - PHP:pcntl_alarm() 和 socket_select() 可以和平地存在于同一个线程中吗?

我有一个主要编写的 PHP CLI 脚本,它用作聊天服务器以供聊天客户端连接(不要问我为什么要在 PHP 中这样做,那是另一个故事哈哈)。

我的脚本利用 socket_select() 函数挂起执行,直到套接字上发生某些事情,此时它唤醒,处理事件,并等待下一个事件。现在,我需要每 30 秒左右执行一些例行任务(检查是否应该解除临时禁止用户,保存用户数据库,其他各种事情)。

据我所知,PHP 根本没有很好的多线程支持。我的第一个想法是每次套接字生成事件并让程序再次流动时比较时间戳,但这非常不一致,因为服务器很可能会闲置几个小时而没有执行我的任何清理例程。

我遇到了 PHP pcntl 扩展,它让我可以使用为发送 SIGALRM 分配一个时间间隔,并在每次发送时执行一个函数。这似乎是我的问题的理想解决方案,但是 pcntl_alarm() 和 socket_select() 相互冲突非常糟糕。每次触发 SIGALRM 时,我的套接字控制代码都会发生各种疯狂的事情。

我的程序相当长,所以我不能在这里全部发布,但这没关系,因为我不相信我在代码方面做错了什么。我的问题是:有什么方法可以在与等待的 socket_select() 相同的线程中处理 SIGALRM?如果是这样,怎么做?如果没有,我的选择是什么?

这是我的程序的一些输出。我的警报功能只是输出“滴答声!” 每当它被调用时,就可以很容易地判断事情何时发生。这是允许它打勾 4 次后的输出(包括错误)(尽管它说了什么,但没有实际尝试连接到服务器):

[05-28-10 @ 20:01:05] 聊天服务器在 192.168.1.28 端口 4050 上启动

[05-28-10 @ 20:01:05] 从文件中加载了 2 个用户

PHP 通知:未定义的偏移量:0 in /home/danny/projects/PHPChatServ/ChatServ.php 第 112 行

PHP 警告:socket_select():无法选择 [4]:第 116 行 /home/danny/projects/PHPChatServ/ChatServ.php 中的系统调用中断

[05-28-10 @ 20:01:15] 打勾!

PHP 警告:socket_accept():无法接受传入连接 [4]:第 126 行 /home/danny/projects/PHPChatServ/ChatServ.php 中的系统调用中断

[05-28-10 @ 20:01:25] 打勾!PHP 警告:socket_getpeername() 期望参数 1 是资源,布尔值在第 129 行的 /home/danny/projects/PHPChatServ/ChatServ.php 中给出

[05-28-10 @ 20:01:25] 接受来自 PHP 的套接字连接 注意:未定义的偏移量:第 112 行 /home/danny/projects/PHPChatServ/ChatServ.php 中的 1

PHP 警告:socket_select():无法选择 [4]:第 116 行 /home/danny/projects/PHPChatServ/ChatServ.php 中的系统调用中断

[05-28-10 @ 20:01:35] 打勾!

PHP 警告:socket_accept():无法接受传入连接 [4]:第 126 行 /home/danny/projects/PHPChatServ/ChatServ.php 中的系统调用中断

[05-28-10 @ 20:01:45] 打勾!

PHP 警告:socket_getpeername() 期望参数 1 是资源,布尔值在第 129 行的 /home/danny/projects/PHPChatServ/ChatServ.php 中给出

[05-28-10 @ 20:01:45] 接受来自的套接字连接

PHP 通知:未定义的偏移量:/home/danny/projects/PHPChatServ/ChatServ.php 第 112 行中的 2

0 投票
1 回答
350 浏览

php-socket - socket program is able to connect to the port which is still in TIME_WAIT

  1. I have written a very simple socket server.
  2. It listens in post 63254.
  3. First i did a socket_create, socket_bind, socket_listen so here a connection is listening.
  4. Then in a loop i do the socket accpet. so here another listen.
  5. the read function reads untill i input exit.
  6. after that the resource id by socket_accept closes.
  7. and then the main connection closes.

when i checked this process in TCPview after closing all connections i can still see the system process showing TIME_WAIT for post 63254

if i again run the socket server program it is connecting and when one full process is over all the connection is closed and the program terminated and now i can see another TIME_WAIT for the same port. but still i could connect to the same port the third time.

in stackover question answer it is said that connection cannot be done for port which is in wait state.

I opened firefox browser it opened 4 connections. when i closed it all closed and the system process showed 4 time waits for 2 minutes. all time wait stays for 2 minutes and disappears.

so what i conclude is for every connection close the time wait is occurs and cannot be avoided.

i read many posts in stack overflow flow but still wasn't sure of it.

i run the following code in command line.

My server Code

The client code

need suggestions to improve a better client server if this is not sufficient. this code is just a child's play. just trying to understand the way communication works.

0 投票
1 回答
704 浏览

serial-port - 从网站发送字节到串口

如何使用 PHP 从远程网站将字节发送到连接到 PIC 芯片的另一台计算机的串行端口?

0 投票
1 回答
1823 浏览

java - php sockets从java服务器读取json数组

我正在使用 TCP/IP 连接到用 JAVA 编写的服务器。我的应用程序将 json 数组发送到此服务器,并且在某些情况下还需要一些结果,即 json 数组。问题是我可以很容易地通过 tcp 发送 json,但是在读取它时,脚本会永远冻结等待,直到它超时。这是我的代码。

$send 是一个编码为 json_encode($array) 的数组。

发送是好的,但当需要接收时,我什么也得不到。

如果可能的话,我不介意使用 jquery(从服务器发送和获取 json 对象)来处理这个问题。我不知道有任何实现可以实现这样的目标,但我愿意接受建议......实际上更喜欢它而不是 php。

0 投票
2 回答
12568 浏览

php - 如何使用php连接telnet并发送命令并将输出写入文本文件

我需要远程登录到一个端口并发送命令并使用 PHP 将输出写入 txt 文件。我是怎么做的?

在这个论坛有一个相同的问题名称使用 PHP 的 telnet 连接,但他们有一个解决方案链接,并且解决方案链接没有打开,所以我必须再次提出问题。

我也从php 站点尝试下面的代码,但它没有将正确的输出保存到文本文件中。代码:

所以,请帮我解决这个问题。我如何远程登录到 localhost 端口 80 并发送命令 GET / HTTP/1.1 并将输出写入文本文件?

0 投票
1 回答
1109 浏览

php - 如何使用 PHP 使 telnet 会话超时

如何使用 PHP 断开 telnet 会话?使用下面的代码我读取 telnet 输出。但如果数据在 3 秒内无法在 $output 变量中接收,我想断开 telnet 会话。我是怎么做到的。请在下面查看我的代码:

0 投票
2 回答
1945 浏览

php - cURL multi 打开的套接字太多

我正在使用 cURL multi 从某些网站获取数据。带代码:

但是,我的问题是 cURL 打开了太多套接字以连接到网络服务器。每个连接,cURL 都会为 web 服务器创建新的套接字。我希望当前连接保持活动状态以进行下一个连接。我不想要 100 个 URL,然后 cURL 必须创建 100 个套接字来处理:(

请帮我。非常感谢 !

0 投票
2 回答
4011 浏览

asterisk - PHP套接字,与服务器的永久连接以接收来自Asterisk AMI的事件?

我正在寻找编写一个 PHP 脚本来充当一个迷你“守护程序”来从远程套接字接收数据。远程服务器是一个 Asterisk VoIP 服务器,我将连接到 Asterisk 管理接口 (AMI) 以尝试接收 AMI 事件通知。连接将通过一个永远在线的 SSH 隧道(使用 autossh),到目前为止,它已经足够稳定,可供我们使用。

这是计划...

  • fsockopen()一个 PHP 脚本连接到 SSH 隧道的本地端口,它使用或很可能转发到另一端的远程端口pfsockopen()
  • PHP 脚本将从 CLI 运行,我想我应该在 cron 作业上使用某种 shell 脚本来检查 PHP 脚本是否由于任何原因没有停止
  • 我需要这个 PHP 脚本永久运行,并永久连接到套接字以在另一端发布数据时接收数据
  • 内存和 CPU 不是问题,因为我们的 Intranet 服务器上有大量资源(犯罪地未充分使用),但同样我不希望这个脚本失控
  • PHP 脚本有望对偶尔出现在套接字另一端的数据做出反应,有时会在 MySQL 数据库中插入或更新数据。显然,我会在必要时打开/关闭 MySQL 连接,而不仅仅是让它挂起。

首先,这是一个永远不会奏效的可怕想法吗?

我意识到对于像这样的小型守护进程来说,PHP 可能不是最好的语言,但我之前在 CLI 上使用 PHP 取得了成功,这是我现在最熟悉的语言。

当数据在套接字的另一端发布时,是否有任何 PHP 函数可以生效?
或者我会fread()像这样循环使用......

循环选项似乎有点乱,所以我只是想知道是否有另一种方式意味着脚本保持连接到套接字但基本上是空闲的,直到出现一些数据。

在考虑将永久运行的 PHP 脚本连接到套接字时,我应该注意哪些缺点/陷阱?

干杯,B

0 投票
1 回答
720 浏览

php - PHP 客户端与 Apache Thrift API 通信

我是一名 PHP 开发人员,在一个将使用 Apache Thrift API 与另一台服务器通信的站点上工作,所以我想知道是否有一些现有的类或某种方式可以用来与 PHP 中的 Thrift API 进行通信。我看到了用 Python 编写的使用 Tsocket 的示例,但我不知道 PHP 是否有 Tsocket 类。因此,如果有人做过这样的工作,那么请发布一些示例或讲述一些我可以用来在 PHP 中实现 thrift API 客户端的类。

提前感谢大家的努力。