使PHP服务器读取基于java的客户端
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(
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));