【问题标题】:Making a PHP server to read a java based client制作 PHP 服务器以读取基于 java 的客户端
【发布时间】:2013-01-14 01:02:27
【问题描述】:
public class Client {
/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    Socket sock = new Socket();
    sock.connect(new InetSocketAddress(InetAddress.getLocalHost(), 43594));

    DataOutputStream out = new DataOutputStream(sock.getOutputStream());
    DataInputStream in = new DataInputStream(sock.getInputStream());

    out.writeByte(255);
    out.writeLong(133713371337L);

    System.out.println("Response: " + in.readByte() + ", " + in.readLong());

    sock.close();
}

而 PHP 服务器意味着读取和写入 java 客户端:

<?php
require 'Stream.php';
$stream = new Stream();

$address = '127.0.0.1';
$port = 43594;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, 0, $port) or die('Could not bind to address');
socket_listen($sock);
echo "Server listening on port " . $port . "...";
$client = socket_accept($sock);

$data = socket_read($client, 1, PHP_BINARY_READ);
$byte_array = unpack('C*', $data);
$stream->setStream($byte_array);
$b2 = $stream->readUnsignedByte();

$l1 = socket_read($client, $stream->readQWord());
echo $b1 . " " . $l1;
socket_write($client, 0);
socket_write($client, $stream->writeQWord(2148000000));

正在使用的流类:http://pastebin.com/p1vc9aPG

我正在尝试用 java 编写一个客户端,用于与服务器联系、发送和读取数据。服务器用 PHP 编写并通过 cli 运行,而客户端用 java 编写。如果可以的话请帮忙,可能没有多少人可以帮助解决这个问题。

协议已经建立,我只是想在 PHP 中实现它。我似乎无法从 PHP 页面读/写回 Java 客户端。

Java 中的客户端是按照我想要的方式定义的。我正在寻找的是 PHP 中的等效服务器,但我似乎无法让它工作。

【问题讨论】:

  • 最终都是从网络读取/写入网络的数据流。因此,语言不同这一事实一点也不“奇怪”。
  • 那么,你能写一个例子来说明我如何在 PHP 服务器上读取从 java 客户端发送的字节和长字节吗?
  • 正如我在下面指出的,使用通用协议,而不是特定于 Java 的协议。
  • 您可能会查看 Quercus,这是一个可以在其中运行 PHP 的 Java 服务器。您可以从 PHP 调用 java 代码,就好像它是原生 PHP 函数一样。然后,您可以让 java 与 java 对话,但在 PHP 中进行处理。
  • 或许在 PHP 端实现一个 SoapServer:php.net/manual/en/class.soapserver.php

标签: java php sockets connection


【解决方案1】:

我实际上是反过来写的,客户端是一个 PHP Web 应用程序,服务器是一个 jsvc 下的 Java 守护进程。

首先要考虑的是定义一个传输协议,因为这两种语言的类型和对象表示是不同的,并且它们可能在具有不同数字表示的硬件上运行。我推荐 JSON 或 XML。

之后,您的服务器可能需要能够处理多个连接,因此需要线程或非阻塞套接字 I/O。

【讨论】:

  • 谢谢,但这并没有真正的帮助。
  • 重点是Java数据流和对象流协议不适合与PHP通信,应该使用JSON等通用协议。
  • 所以没有办法只使用数据流与 PHP 进行通信?这正是我想要做的。协议已经建立。
  • 你可以看看 Apache Thrift thrift.apache.org 它声称为 Java、PHP 和其他几种语言提供跨语言传输。
  • Java 中的客户端定义了我想要的样子。我正在寻找的是 PHP 中的等效服务器,但我似乎无法让它工作。
【解决方案2】:

首先,您应该在 Java 代码中写入套接字后调用 .flush()。否则数据不会被发送到服务器。

然后,网络端点之间的通信只是关于所使用协议的协议。这里没有特定的语言...

【讨论】:

  • 协议已经建立,我只是想在PHP中实现它。
  • DataOutputStreams 和套接字输出流不需要刷新。它们没有缓冲。
  • @EJP 这不是我的经验
  • @fge 当堆栈中有 BufferedOutputStream 时,这是您的经验。不然。
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
相关资源
最近更新 更多