gpt4 book ai didi

java - 如何使用套接字将文件从php客户端发送到java服务器

转载 作者:行者123 更新时间:2023-12-01 13:11:38 25 4
gpt4 key购买 nike

我想从 php 客户端传输 java 服务器的套接字文件。

Java 中的 Java 是个好工作。

但是php无法将文件传输到java服务器。

我需要从java代码转换为php代码或者我想知道通过其他方法从 php 客户端传输 java 服务器的套接字文件。请帮我...谢谢!!!

  1. Java 客户端代码。

    File file = new File(fileName);
    Socket socket = new Socket("localhost", 20225);
    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

    oos.writeObject(file.getName());

    FileInputStream fis = new FileInputStream(file);
    byte [] buffer = new byte[100];
    Integer bytesRead = 0;

    while ((bytesRead = fis.read(buffer)) > 0) {
    oos.writeObject(bytesRead);
    oos.writeObject(Arrays.copyOf(buffer, buffer.length));
    }

    oos.close();
    ois.close();
  2. Java 服务器代码

    ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
    FileOutputStream fos = null;
    byte [] buffer = new byte[BUFFER_SIZE];
    String filename = null;
    Map<String, Object> retMap = new HashMap<String, Object>();

    // 1. Read file name.
    Object obj = ois.readObject();

    try {

    filename = Config.getInstance().getProperties("dispatcher.policy") + obj;
    fos = new FileOutputStream(new File(filename));

    // 2. Read file to the end.
    Integer bytesRead = 0;
    do {
    obj = ois.readObject();

    bytesRead = (Integer)obj;
    obj = ois.readObject();
    buffer = (byte[])obj;

    // 3. Write data to output file.
    fos.write(buffer, 0, bytesRead);

    } while (bytesRead == BUFFER_SIZE);

    logger.info("File transfer success : {} ", filename );


    fos.close();

    }catch(Exception e){

    }
    oos.writeObject("OK");
    ois.close();
    oos.close();

最佳答案

$fp = stream_socket_client("tcp://localhost:20225", $error_number, $error_string);
if ( !$fp ) {
# output what went wrong with a new line at the end
echo "$error_number ($error_string)\n";
} else {
fwrite($fp, file_get_contents(FILE_NAME));
}
# uncomment next line if you happen to have more code below
# fclose($fp); # does what it says - closes the resource

stream_socket_client()返回流资源,如果失败则返回 false。它可能还需要三个参数:超时、标志和上下文 - 如果您需要更改默认值,请参阅文档以获取更多信息。

我已将 tcp:// 作为套接字传输,顺便说一句,这是默认值。我将其作为提示,表明您可以使用其他传输方式,很可能来自 Internet Domain: TCP, UDP, SSL, and TLS 列表。 Unix Domain: Unix and UDG 的其他列表。使用 localhost 时,后者是一种更快的方法,但是您需要一个支持该功能的操作系统,以及(可能并且如果可能的话,在 java 中)Java 服务器部分的正确代码。

<强> fwrite() 是二进制安全写入 - 它只是将作为第二个参数传递的二进制数据写入作为第一个参数传递的资源。

<强> file_get_contents() 也正如其名称所示,以二进制安全的方式进行操作。第一个参数是文件的路径。它可能需要更多参数 - 如果默认值似乎不合适,请查阅文档。

关于java - 如何使用套接字将文件从php客户端发送到java服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com