java - PHP 向 Java 守护进程发送数据

标签 java php networking daemon

我在将数据从 PHP 脚本发送到 Java 守护程序时遇到一些问题。

这是 Java:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Listener implements Runnable {
    ServerSocket listenerSocket;
    Socket connection = null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;
    @Override
    public void run()
    {
        try{
            listenerSocket = new ServerSocket(7331);
            System.out.println("Waiting for connection");
            connection = listenerSocket.accept();
            System.out.println("Connection received from " + connection.getInetAddress().getHostName());
            out = new ObjectOutputStream(connection.getOutputStream());
            out.flush();
            in = new ObjectInputStream(connection.getInputStream());
            do{
                try{
                    message = (String)in.readObject();
                    System.out.println("client>" + message);
                }
                catch(ClassNotFoundException classnot){
                    System.err.println("Data received in unknown format");
                }
            }while(!message.equals("bye"));
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
        finally{
            try{
                in.close();
                out.close();
                listenerSocket.close();
            }
            catch(IOException ioException){
                ioException.printStackTrace();
            }
        }
    }
}

这是 PHP 代码:

    <?php
    header('Content-Type: text/html; charset=utf-8');
    $fp = fsockopen("127.0.0.1", 7331, $errno, $errstr);
    if (!$fp) {
        echo "ERROR: $errno - $errstr<br />\n";
    } else {
        fwrite($fp, "yaydata");
        echo fread($fp, 26);
        fclose($fp);
    }

?>

这是我在 Java 中遇到的错误:

Waiting for connection
Connection received from localhost.localdomain
java.io.StreamCorruptedException: invalid stream header: 6675636B
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
        at com.cj.panel.Listener.run(Listener.java:25)
        at java.lang.Thread.run(Thread.java:744)
Exception in thread "Thread-0" java.lang.NullPointerException
        at com.cj.panel.Listener.run(Listener.java:41)
        at java.lang.Thread.run(Thread.java:744)

我似乎看不出这有什么问题。我对跨平台网络东西很陌生,因此感谢您的帮助。

最佳答案

ObjectInputStreamObjectOutputStream 用于读取和写入序列化 Java 对象,并且仅在两个 Java 程序之间使用。您的 PHP 程序不知道如何以 ObjectInputStream 可以处理的形式编写任何内容。

您应该在 Java 程序中使用纯输入/输出流。

关于java - PHP 向 Java 守护进程发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20297276/

相关文章:

php - 使用特殊字符对数组进行排序

javascript - 试图弄清楚为什么 Firefox 会发送未经请求的 FIN ACK 数据包

php - 在 Controller 中使用模型函数

php - 为 php/mysql CMS 预处理和后处理多语言用户输入的最佳方法

MacOSX : how to capture network events? 或 : how does Private-Eye works?

java - 使用 DatagramChannel 加入多播组而不指定网络接口(interface)

java - 仅当滚动条位于底部且滚动锁定关闭时,如何使 JTextPane 自动滚动?

Java 内存模型 : volatiles and reads/writes reordering

java - 无法使用 Spring、Hibernate 和 c3p0 创建 dataSource bin

Java:方法签名中类型的子类