Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使PHP服务器读取基于java的客户端_Java_Php_Sockets_Connection - Fatal编程技术网

使PHP服务器读取基于java的客户端

使PHP服务器读取基于java的客户端,java,php,sockets,connection,Java,Php,Sockets,Connection,PHP服务器用于读取和写入java客户端: 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(

PHP服务器用于读取和写入java客户端:

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();
}

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


然后,网络端点之间的通信就是关于所用协议的一致性。这里没有特定的语言…

我实际上是以另一种方式编写的,客户端是一个PHP web应用程序,服务器是jsvc下的java守护进程

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


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

最终,这都是从网络读取/写入的数据流。因此,语言不同这一事实并没有让它变得“奇怪”。那么,你能写一个例子,说明我如何读取PHP服务器上java客户端发送的字节&long吗?正如我在下面指出的,使用一个通用协议,而不是特定于java的协议。你可以研究Quercus,它是一个可以在其中运行PHP的java服务器。您可以从PHP调用java代码,就像调用本机PHP函数一样。然后,您可以让java与java对话,但使用PHP处理。也许可以在PHP端实现SoapServer:谢谢,但这并没有真正的帮助。重点是java数据流和对象流协议不适合与PHP通信,您应该使用一个通用的协议,比如JSON,那么就没有办法只使用数据流与PHP进行通信了吗?这正是我想要做的。协议已经建立。你可以看看Apache Thrift,它声称为Java、PHP和其他几种语言提供跨语言传输。Java中的客户端是按照我的要求定义的。我要找的是PHP中的等效服务器,我似乎无法让它工作。协议已经建立,我只是尝试将其实现到PHP中。DataOutputStreams和socket输出流不需要刷新。它们没有缓冲。@EJP这不是我的experience@fge当堆栈中存在BufferedOutputStream时,这是您的经验。不是这样。
<?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));