【问题标题】:Communication failure between PHP and Java through socketPHP和Java通过socket通信失败
【发布时间】:2018-06-28 18:07:41
【问题描述】:

我遇到了一个问题,希望你们知道我哪里出错了。

我正在尝试通过 PHP 向我正在运行的 JAVA 程序发送和接收信息。

程序是knockknockserver

我使用的 PHP 代码是这样的:

$host='127.0.0.1';
$port=4444;

$socket=socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not 
create socket \n");

$result=socket_bind($socket, $host, $port) or die("Could not bind to 
 socket\n");


$result=socket_listen($socket, 3) or die('Could not set up socket 
listenern');

$spawn=socket_accept($socket) or die('Could not accept incoming 
connection');

$input=socket_read($result, 1024) or die('Could not read input');

socket_close($spawn);
socket_close($socket);

我刚从网上抓的。

理想的交互是我连接到端口4444,然后Java服务器响应knock knock!

我遇到的问题是,如果我首先运行 Java 服务器,PHP 脚本无法绑定套接字(我猜是因为它已经在使用中)。

有时 socket_accept 只会让我的浏览器卡住,所以我必须完全重新启动它才能让它再次工作。

我真正想做的是学习如何通过端口进行通信,我一直在尝试阅读,但我只是不明白为什么我无法通过已经打开的端口连接和接受通信。

【问题讨论】:

  • 错误信息是什么? Could not bind to socket\n?
  • 是的,如果 Java 服务器在端口上运行,我会收到该错误,如果 Java 服务器关闭,我会无法读取输入。

标签: java php sockets port


【解决方案1】:

您引用的 PHP 代码用于服务器。 TCP 连接有服务器端和客户端。你不能神奇地让服务器互相“交谈”。

您正在使用socket_bind,这是一个 PHP 函数,用于将服务器套接字绑定到本地端口并开始等待传入连接。您想使用 socket_connect($socket, $address, $service_port) 代替将客户端套接字连接到另一个已经运行的服务器(在您的情况下是 Java 服务器)。

【讨论】:

  • 我明白了,我在读取服务器输出时遇到了一些问题,您知道需要读取哪些套接字命令吗?我猜socket_create会是一样的,然后是socket connect,如果我跟着一个socket _read我会得到'Could not read input'。
  • @MarcusGrass 如果您有新问题,您应该提出一个新问题,不要在 cmets 中进一步讨论。如果此答案解决了您的问题,请接受正确的答案。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2014-11-05
  • 2013-10-24
  • 2010-09-27
  • 2019-09-24
  • 2014-05-28
  • 2017-07-02
  • 2015-05-24
  • 1970-01-01
相关资源
最近更新 更多