【问题标题】:How to send file from php client to java server with sockets如何使用套接字将文件从 php 客户端发送到 java 服务器
【发布时间】:2014-04-03 16:19:34
【问题描述】:

我想从 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();
    

【问题讨论】:

    标签: java php file sockets


    【解决方案1】:
    $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() 也以二进制安全的方式完全按照其名称所说的那样工作。第一个参数是文件的路径。它可能需要更多参数 - 如果默认值似乎不合适,请查阅文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2016-03-03
      • 2011-04-04
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多