Hipnoted Posted December 20, 2006 at 11:39 PM Report #71673 Posted December 20, 2006 at 11:39 PM É assim, tou num trabalho em Java RMI que me dava geito enviar um ficheiro do servidor para o cliente. Não estou a falar em envio de Strings mas sim de um ficheiro mesmo. Basicamente o cliente chama um método X do tipo public File receberFicheiro(). Mas a minha dúvida está em como posso ler o ficheiro recebido já que o ficheiro tem um pathname especifico do servidor e não sei lidar com isso no cliente. Já perdi uma tarde por causa disto mas não consegui resolver. Agradeço a quem me ajudar... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
magician Posted December 21, 2006 at 12:51 AM Report #71679 Posted December 21, 2006 at 12:51 AM Pá eu nunca trabalhei com RMI mas penso que se o file nao for muito grande podias mandar o servido ler o file e envia para o client em forma de stream e depois caso fazer o cliente criar esse file de forma identica. Não tou a ver outra forma :S I haven’t lost my mind; it’s backed up on DVD somewhere!
Knitter Posted December 21, 2006 at 09:32 AM Report #71700 Posted December 21, 2006 at 09:32 AM Hum... esse é um problema interessante de RMI... O ficheiro tem mesmo de ser enviado dessa forma? Não podes enviar o ficheiro através de um socket? Já agora que tipo de problemas estás a ter?
Knitter Posted December 21, 2006 at 09:40 AM Report #71701 Posted December 21, 2006 at 09:40 AM Estive a pensar no teu problema e, se não me engano, a classe File define um descritor de ficheiros, e esse tipo de dados não pode ser passado através do RMI. Apesar da classe ser serializável, esse não é o único requisíto. Objectos como Threads e descritores de ficheiros não são passíveis de enviar usando RMI uma vez que não fazem sentido na máquina que recebe o parâmetro. A solução terá mesmo de ser criar um socket de comunicação e enviar o ficheiro por esse socket. Posso estar engando mas penso que não conseguirás transferir o ficheiro como um objecto RMI.
inginheiiro Posted December 21, 2006 at 10:09 AM Report #71710 Posted December 21, 2006 at 10:09 AM Tenta algo do género . No Servidor ... ... byte[] bt; ........... public byte[] sendFile(File fname){ try{ ....................... FileInputStream is=new FileInputStream(fname); byte[] b=new byte[(int)fname.length()]; is.read(b); bt=b; return bt; } catch (Exception e){} return bt; } public byte[] retrieveFile() { return bt; } No Cliente public void sendFile(File f){ try { ChatServer c=(ChatServer)Naming.lookup("rmi://"+dwin.host+"/ChatServer"); byte[] v=c.retrieveFile(); RandomAccessFile raf=new RandomAccessFile(f,"rw"); raf.write(v); } catch (Exception e) {} } para ficheiros grandes usa sockets. /ing I used to have a life ... but i bought a programmable machine in 1982 ...
Knitter Posted December 21, 2006 at 10:17 AM Report #71712 Posted December 21, 2006 at 10:17 AM O problema nesse caso é o mesmo, embora arrays sejam objectos em Java, não são serializáveis logo não poderão ser passados como argumentos de um método RMI.
Knitter Posted December 21, 2006 at 10:20 AM Report #71714 Posted December 21, 2006 at 10:20 AM Uma opção poderá ser implementares tu os métodos de serialização, private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; Mas não sei até que ponto te será útil ou fácil de implementar.
inginheiiro Posted December 21, 2006 at 10:22 AM Report #71715 Posted December 21, 2006 at 10:22 AM tudo se faz. No need for implementações de serializações. usa o http://xstream.codehaus.org/ /ing I used to have a life ... but i bought a programmable machine in 1982 ...
Knitter Posted December 21, 2006 at 10:34 AM Report #71717 Posted December 21, 2006 at 10:34 AM Sim mas dessa forma não estamos a usar RMI, por isso é que preguntei se tem mesmo de ser por RMI. Sem ser por RMI é fácil mas se for necessário usar o mecanismo então vai exigir mais trabalho. E já agora, implementar serializações não é nenhum bicho de sete cabeças, é até bastante fácil 😞
inginheiiro Posted December 21, 2006 at 10:40 AM Report #71719 Posted December 21, 2006 at 10:40 AM peço desculpa. não fui esclarecedor. 1- http://xstream.codehaus.org/ wrapper para simplificar serializações de objectos, logo não é necessário implementar serialização, basta usar o Xstream. 2-usar o rmi. ** offtopic ** Percebo que seja pra um trabalho da faculdade... mas o rmi tá morto na minha opinião 😞 /ing I used to have a life ... but i bought a programmable machine in 1982 ...
Knitter Posted December 21, 2006 at 10:41 AM Report #71721 Posted December 21, 2006 at 10:41 AM Agora sou eu que não percebo... O Xstrem permite facilitar as serializações mas como é que o usas com o mecanismo RMI? Offtopic... Tão morto como o CORBA, mas serviu de base para muito do que se faz actualmente, mesmo assim ainda gosto de usar e ainda encontro bastantes utilizações onde simplesmente é mais fácil e rápido, dado os meus poucos conhecimentos noutros mecanismos claro, implementar computação distribuída.
inginheiiro Posted December 21, 2006 at 11:02 AM Report #71722 Posted December 21, 2006 at 11:02 AM Agora sou eu que não percebo... O Xstrem permite facilitar as serializações mas como é que o usas com o mecanismo RMI? p.ex. serializas um File para uma string e passas a string como argumento na tua função em vez de um array de bytes. O Corba tmb tá morto 😞 simplesmente sofre do mesmo mal de muitas tecnologias defendidas por alguns envagelistas ... negam-se a evoluir 😄 /ing I used to have a life ... but i bought a programmable machine in 1982 ...
Knitter Posted December 21, 2006 at 11:18 AM Report #71723 Posted December 21, 2006 at 11:18 AM Ok, percebi, mas talvez seja melhor dizer, serializamos o conteúdo do File, uma vez que File é um descritor de ficheiro, não faz sentido do lado do cliente, e passamos o conteúdo por parâmetro, mas assim é melhor usarmos sockets, senão estamos a sobrecarregar o mecanismo RMI. O futuro são os webservices.... ou não, quem sabe 😞 Bem, espero que as ideias aqui dadas sirvam para alguma coisa, de preferência para resolver o problema 😄
inginheiiro Posted December 21, 2006 at 11:23 AM Report #71726 Posted December 21, 2006 at 11:23 AM O futuro são os webservices.... ou não, quem sabe Futuro não, presente 😞 Bem, espero que as ideias aqui dadas sirvam para alguma coisa, de preferência para resolver o problema yep 😄 I used to have a life ... but i bought a programmable machine in 1982 ...
Hipnoted Posted December 21, 2006 at 12:21 PM Author Report #71735 Posted December 21, 2006 at 12:21 PM Obrigado a todos pelas respostas mas acho que vou optar por enviar strings, já tá feito e tenho de entregar o trabalho até dia 26. E nos dias anteriores (25) não devo fazer nada... 😄 Quanto à opção de receber byte [] acho que vai dar tudo ao mesmo que receber strings. Quanto à questão de usar o socket, em RMI isso é totalmente transparente para mim e quando trabalhei com sockets o que enviava eram strings. Mas obrigado à mesma. 😞 "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now