Отправка пути через Java NiO - PullRequest
1 голос
/ 26 марта 2019

Я программирую сервер и клиент, клиент отправит файл на сервер, однако мне нужно отправить имя файла вместе, чтобы сервер распознал и записал файл с именем, отправленным клиентом.В настоящее время он не отправляет имя файла, поэтому я должен сообщить серверу имя файла и его путь, где он будет сохранен.Можно ли отправить имя файла и путь, который будет сохранен в файл?И если это возможно, какой фрагмент кода я должен использовать, чтобы иметь возможность указать такую ​​информацию?Если кто-нибудь может мне помочь, я действительно ценю это.

на стороне клиента

public class FileSenderClient {
    private void sendFile(SocketChannel socketChannel) throws IOException {
        Path path = Paths.get("C:\\SIS\\database.FDB");\\ path to file 
        FileChannel inChannel = FileChannel.open(path);

        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while (inChannel.read(buffer) > 0) {
            buffer.flip();
            socketChannel.write(buffer);
            buffer.clear();
        }
        socketChannel.close();
    }
    private SocketChannel CreateChannel() throws IOException {

        SocketChannel socketChannel = SocketChannel.open();
        socketChannel.configureBlocking(true);
        SocketAddress sockAddr = new InetSocketAddress("localhost", 9000);
        socketChannel.connect(sockAddr);
        return socketChannel;
    }
    public static void main(String[] args) throws IOException {
        FileSenderClient client = new FileSenderClient();
        SocketChannel socketChannel = client.CreateChannel();
        client.sendFile(socketChannel);
    }
}

на стороне сервера

public class FileReceiver {

        private void readFileFromSocketChannel(SocketChannel socketChannel) throws IOException {

        Path path = Paths.get("C:\\Data\\database.FDB"); - here  i need to receive
                                                           the name from the class FileSenderClient
        FileChannel fileChannel = FileChannel.open(path,
                EnumSet.of(StandardOpenOption.CREATE,
                        StandardOpenOption.TRUNCATE_EXISTING,
                        StandardOpenOption.WRITE)
                );
        //Allocate a ByteBuffer
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while (socketChannel.read(buffer) > 0) {
            buffer.flip();
            fileChannel.write(buffer);
            buffer.clear();
        }
        fileChannel.close();
        System.out.println("Receving file successfully!");
        socketChannel.close();
    }

    private SocketChannel createServerSocketChannel() throws IOException {
        ServerSocketChannel serverSocket = null;
        SocketChannel client = null;
        serverSocket = ServerSocketChannel.open();
        serverSocket.socket().bind(new InetSocketAddress(9000));
        client = serverSocket.accept();

        System.out.println("connection established .." + client.getRemoteAddress());
        return client;
    }


    public static void main(String[] args) throws IOException {
        FileReceiver server = new FileReceiver();
        SocketChannel socketChannel = server.createServerSocketChannel();
        server.readFileFromSocketChannel(socketChannel);

    }


}
...