【问题标题】:Client-Server Networking Between PHP Client and Java ServerPHP客户端和Java服务器之间的客户端-服务器网络
【发布时间】:2011-02-10 13:00:02
【问题描述】:

我有一个已经完成 99% 的大学项目。它由两部分组成——网站(PHP)和桌面(Java)。

人们在网站上有自己的帐户,他们希望查询有关其帐户的不同信息。他们发送一条短信,该短信由桌面应用程序接收,该应用程序查询网站数据库(MySQL)并相应地发送回复。这部分工作得很好。问题是有时网站希望指示桌面应用程序将特定的 SMS 发送到特定的号码。显然,除了将所有负载都放到数据库服务器上之外,似乎别无他法……这就是我让它工作的方式。网站将 SMS 作业放在特定的表中。 Java 应用程序一次又一次地轮询这个表,如果它找到一个工作,它就会执行它。即使这部分工作正常,但不幸的是,我的大学不接受像这样轮询数据库。 :(

我能想到的另一种方法是使用客户端-服务器。我尝试制作 Java 服务器及其 PHP 客户端。因此,每当要发送 SMS 时,网站都会打开一个到桌面应用程序的套接字连接并发送两个字符串(单元号和 SMS 消息)。不幸的是,我无法做到这一点。我成功地制作了一个在通过 Java 客户端连接时工作正常的 Java 服务器,类似地,我的 PHP 客户端正确连接到 PHP 服务器,但是当我尝试跨越它们时,它们开始互相憎恨...... PHP 显示没有错误,但 Java 在尝试读取输入流的标头时会给出 StreamCorruptedException

谁能告诉我可以尝试使 PHP 客户端和 Java 服务器一起工作吗?或者如果上述目的可以通过其他方式实现,如何实现?

问候, 亚西尔

【问题讨论】:

  • 使用 StreamCorruptedException(String reason) 并告诉我们消息是什么
  • 好的,我会在晚上回到笔记本电脑时执行此操作。现在我远离它。不过,这有点像“损坏的标头:xxxxx”。谢谢

标签: java php architecture client


【解决方案1】:

等等...你在使用对象流吗?根据 java 文档 StreamCorruptedException 是“当从对象流中读取的控制信息违反内部一致性检查时抛出。”我怀疑您的 PHP 应用程序正在发送 Java 认为的序列化对象。你为什么不去低技术和阅读字符串?以下内容在当时对我有用:

       ServerSocket serverSocket = new ServerSocket(port);
       Socket clientSocket = serverSocket.accept();
       BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

       while((inputLine = in.readLine())!=null)
      {
        //Do whatever
      }

【讨论】:

  • 是的,这似乎是合乎逻辑的。我今天肯定会试一试,并会带着结果回到这里。感谢您的回复。
  • 你的怀疑是对的,伙计。 PHP 应用程序真正以字符串的形式发送它。所以我能够使用您提供的代码完成我的任务:) 非常感谢!
【解决方案2】:

您可以尝试调查 Quercus。它是一个在 java 中运行 PHP 的服务器。您可以直接从 PHP 调用 java,就好像它是原生 PHP 函数一样。这样你就不用担心流了。

【讨论】:

  • 嗯,所以 Quercus 是一个网络服务器。这意味着: 1. 我的项目需要在运行 Quercus 而不是 Apache 或 IIS 的服务器上运行。 2. Web 和桌面应用程序都需要在一台机器上运行。这两个问题可能会让它再次变得不可接受。如果我理解错了,请纠正我。另外,感谢您的快速回复。
  • 您提到您尝试了 java 服务器和 php 服务器,Quercus 将两者合二为一(它是免费的,就像 Apache)。您的 PHP 和 Java 客户端都应该可以很好地与 Quercus 服务器连接。 Quercus 应该可以解决你“穿越”的问题。不确定您所说的 #2 是什么意思。
  • 可能是我的问题或评论不够清楚。我想说的是,我有一个 PHP 应用程序(网站)和一个用 Java 编写的桌面应用程序。现在这个包是为非技术、商业类型的用户准备的。他/她想在 PC 上运行 Java 桌面应用程序;和网站在线,通过使用任何通用网络主机提供的主机。很明显,主机通常使用的网络服务器通常是 Apache 或 IIS。因此,如果我绑定用户使用 quercus,这将是一个缺点,我的 uni 不会接受它。第 2 点意味着用户必须在一台机器上托管网站和桌面应用程序,这是不希望的。
  • 当您说您制作了一个“java 服务器”时,我认为您不仅仅局限于普通的 Apache/IIS。大多数托管服务提供商在基本层上不支持 java。
猜你喜欢
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多