首页 > 解决方案 > require_once():javabridge 需要打开失败

问题描述

我有问题。

我已经设置了我的java和我的 java 网桥。我已经运行并打开了端口,8080但是当我运行我的 php 代码时,我在这里遇到了错误:

Warning: require_once(http://localhost:8080/JavaBridge/java/Java.inc): failed to open stream: HTTP request failed! in C:\xampp\htdocs\mt4\test2.php on line 3

Fatal error: require_once(): Failed opening required 'http://localhost:8080/JavaBridge/java/Java.inc' (include_path='.;C:\php\pear') in C:\xampp\htdocs\mt4\test2.php on line 3

在我的选择端口代码中,我使用此代码使用手动端口,

public void init(final String[] s) {
    String sockname = null;
    int logLevel = -1;
    final String tcpSocketName = "9267";
    if (s.length > 3) {
        this.checkOption(s);
    }
    try {
        if (s.length > 0) {
            sockname = s[0];
            if (sockname.startsWith("-")) {
                this.checkOption(s);
            }
        }
        try {
            if (s.length > 1) {
                logLevel = Integer.parseInt(s[1]);
            }
        }
        catch (NumberFormatException e2) {
            this.usage();
        }
        catch (Throwable t) {
            t.printStackTrace();
        }
        if (s.length == 0) {
            try {
                final int tcpSocket = Integer.parseInt(tcpSocketName);
                final int freeJavaPort = findFreePort(tcpSocket);
                final int freeHttpPort = findFreePort(8080);
                final int freeHttpsPort = findFreePort(8443);
             /*   final Object result = JOptionPane.showInputDialog(null, "Start a socket listener on port", "Starting the PHP/Java Bridge ...", 3, null, new String[] { "INET_LOCAL:" + freeJavaPort, "INET:" + freeJavaPort, "HTTP_LOCAL:" + freeHttpPort, "HTTP:" + freeHttpPort, "HTTPS_LOCAL:" + freeHttpsPort, "HTTPS:" + freeHttpsPort }, "HTTP_LOCAL:" + freeHttpPort);
                if (result == null) {
                    System.exit(0);
                }*/
                //sockname = result.toString();
                sockname = "8080";
            }
            catch (Throwable t2) {}
        }
        if (s.length == 0) {
            TCPServerSocket.TCP_PORT_BASE = Integer.parseInt(tcpSocketName);
        }
        if (checkServlet(logLevel, sockname, s)) {
            return;
        }
        final ISocketFactory socket = bind(logLevel, sockname);
        if ("true".equals(System.getProperty("php.java.bridge.test.startup"))) {
            System.exit(0);
        }
        JavaBridge.initLog(String.valueOf(socket), logLevel, s);
        JavaBridge.init(socket, logLevel, s);
    }
    catch (Exception e) {
        throw new RuntimeException(e);
    }
}

xampp用于运行 php。我的 tomcat 已经打开了 8080 端口,并且在 php.ini 我已经设置allow_url_include=On但仍然无法连接到我的 javaBridge 端口,为什么会这样?谁能帮我解决这个问题

如果我使用此代码,

final Object result = JOptionPane.showInputDialog(null, "Start a socket listener on port", "Starting the PHP/Java Bridge ...", 3, null, new String[] { "INET_LOCAL:" + freeJavaPort, "INET:" + freeJavaPort, "HTTP_LOCAL:" + freeHttpPort, "HTTP:" + freeHttpPort, "HTTPS_LOCAL:" + freeHttpsPort, "HTTPS:" + freeHttpsPort }, "HTTP_LOCAL:" + freeHttpPort);
                    if (result == null) {
                        System.exit(0);
                    }
                    sockname = result.toString();
                   // sockname = "8080";
                }

但我必须选择我将使用的女巫端口......所以我需要设置端口使用静态端口。

这是我的班级TCPServerSocket

// 
// Decompiled by Procyon v0.5.36
// 

package php.java.bridge.http;

import java.net.Socket;
import java.net.UnknownHostException;
import java.net.InetAddress;
import java.io.IOException;
import java.net.ServerSocket;

public class TCPServerSocket implements ISocketFactory
{
    public static int TCP_PORT_BASE;
    private ServerSocket sock;
    private int port;
    boolean local;
    
    public static ISocketFactory create(String name, final int backlog) throws IOException {
        boolean local = false;
        if (name == null) {
            throw new NullPointerException("name");
        }
        if (name.startsWith("INET:")) {
            name = name.substring(5);
        }
        else if (name.startsWith("INET_LOCAL:")) {
            local = true;
            name = name.substring(11);
        }
        final int p = Integer.parseInt(name);
        final TCPServerSocket s = new TCPServerSocket(p, backlog, local);
        return s;
    }
    
    private ServerSocket newServerSocket(final int port, final int backlog) throws IOException {
        try {
            if (this.local) {
                return new ServerSocket(port, backlog, InetAddress.getByName("127.0.0.1"));
            }
        }
        catch (UnknownHostException ex) {}
        return new ServerSocket(port, backlog);
    }
    
    private void findFreePort(final int start, final int backlog) {
        int port = start;
        while (port < start + 100) {
            try {
                this.sock = this.newServerSocket(port, backlog);
                this.port = port;
                return;
            }
            catch (IOException e) {
                ++port;
                continue;
            }
        }
    }
    
    private TCPServerSocket(final int port, final int backlog, final boolean local) throws IOException {
        this.local = local;
        if (port == 0) {
            this.findFreePort(TCPServerSocket.TCP_PORT_BASE, backlog);
        }
        else {
            this.sock = this.newServerSocket(port, backlog);
            this.port = port;
        }
    }
    
    @Override
    public void close() throws IOException {
        this.sock.close();
    }
    
    @Override
    public Socket accept() throws IOException {
        final Socket s = this.sock.accept();
        s.setTcpNoDelay(true);
        return s;
    }
    
    @Override
    public String getSocketName() {
        return String.valueOf(this.port);
    }
    
    @Override
    public String toString() {
        return (this.local ? "INET_LOCAL:" : "INET:") + this.getSocketName();
    }
    
    static {
        TCPServerSocket.TCP_PORT_BASE = 9267;
    }
}

标签: javaphp-java-bridge

解决方案


推荐阅读