PHP客户端和Java Server之间的客户端 - 服务器网络

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

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

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

有人可以告诉我可以尝试让PHP客户端和Java服务器一起工作吗?或者如果上述目的可以通过其他方式实现,怎么做?</ p>

问候,
Yasir </ p>
</ div>

展开原文

原文

I have a university project which is already 99% completed. It consists of two parts-website (PHP) and desktop (Java).

People have their accounts on the website and they wish to query different information regarding their accounts. They send an SMS which is received by desktop application which queries database of website (MySQL) and sends the reply accordingly. This part is working superbly. The problem is that some times website wishes to instruct the desktop application to send a specific SMS to a particular number. Apparently there seems no way other than putting all the load to the DB server... This is how I made it work. Website puts SMS jobs in a specific table. Java application polls this table again and again and if it finds a job, it executes it. Even this part is working correctly but unfortunately it is not acceptable by my university to poll the DB like this. :(

The other approach I could think of is to use client-server one. I tried making Java server and its PHP client. So that whenever an SMS is to be sent, the website opens a socket connection to desktop application and sends two strings (cell # and SMS message). Unfortunately I am unable to do this. I was successfully to make a Java server which works fine when connected by a Java client, similarly my PHP client connects correctly to a PHP server, but when I try to cross them, they start hating each other... PHP shows no error but Java gives StreamCorruptedException when it tries to read header of input stream.

Could someone please tell what I can try to make PHP client and Java server work together? Or if the said purpose can be achieved by another means, how?

Regards, Yasir

duancong2160
duancong2160 好的,当我晚上回到笔记本电脑时,我会这样做。现在我离它了。它有点像'腐败的标题:xxxxx'。谢谢
10 年多之前 回复
dongxing2030
dongxing2030 使用StreamCorruptedException(字符串原因)并告诉我们消息是什么
10 年多之前 回复

2个回答



等等......你在使用对象流吗? 根据java文档,StreamCorruptedException是“当从对象流中读取的控件信息违反内部一致性检查时抛出”。 我怀疑你的PHP应用程序正在发送Java认为是序列化对象的东西。 你为什么不去低科技并读一个字符串? 以下在当天对我有用:</ p>

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

while((inputLine = in.readLine())!= null)
{
//做任何事情
}
</ code > </ pre>
</ div>

展开原文

原文

Wait... are you using object streams? According to the java documentation StreamCorruptedException is "Thrown when control information that was read from an object stream violates internal consistency checks." I doubt your PHP app is sending what Java considers a serialized object. Why don't you go low-tech and read a string? The following had worked for me back in the day:

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

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

doufulian4076
doufulian4076 你的疑问是正确的伙伴。 PHP应用程序确实以字符串的形式发送它。 所以我能够通过使用你提供的代码来完成我的任务:)非常感谢!
10 年多之前 回复
dpfqy5976
dpfqy5976 是的,这看似合乎逻辑。 我今天肯定会试一试,结果会回到这里。 谢谢你的答复。
10 年多之前 回复



您可以尝试查看Quercus。 它是一个在java中运行PHP的服务器。 您可以直接从PHP调用java调用,就好像它是本机PHP函数一样。 您不必担心流。</ p>
</ div>

展开原文

原文

You might try looking into Quercus. It's a server that runs PHP inside java. You can call java called directly from PHP as if it was native PHP functions. You won't have to worry about streams then.

dongying3830
dongying3830 当你说你做了一个“java服务器”时,我认为你并不仅限于普通的Apache / IIS。 大多数托管服务提供商不支持基本层上的java。
10 年多之前 回复
duan32342
duan32342 可能在我的问题或评论中我不够清楚。 我想说的是我有一个PHP应用程序(网站)和一个用Java编写的桌面应用程序。 现在这个包适用于非技术,商业类型的用户。 他/她想在电脑上运行Java桌面应用程序; 和网站在线,利用任何通用网络主机提供的托管。 很明显,主机通常使用的Web服务器通常是Apache或IIS。 因此,如果我绑定用户使用quercus,这将是一个缺点,我的uni将不接受它。 第2点意味着用户必须在一台不需要的机器上托管网站和桌面应用程序。
10 年多之前 回复
dongyong1897
dongyong1897 你提到你试过一个java服务器和一个php服务器,Quercus会提供一个(它是免费的,比如Apache)。 您的PHP和Java客户端都可以正常连接Quercus服务器。 栎树应该解决你的“穿越它们”的问题。 不确定你的意思是#2。
10 年多之前 回复
dongyang7152
dongyang7152 嗯所以Quercus是一个网络服务器。 这意味着:1。我的项目需要在运行Quercus而不是Apache或IIS的服务器上运行。 2. Web和桌面应用程序都需要在一台机器上运行。 这两个问题可能再次令人无法接受。 如果我错了,请纠正我。 另外,感谢您的快速回复。
10 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问