Article View: be.comp.programming
Article #557Re: client/server file transfer in java
From: b010310
Date: Tue, 23 Jan 2007 20:23
Date: Tue, 23 Jan 2007 20:23
111 lines
4576 bytes
4576 bytes
Pieter Vandewoestyne wrote:
> Hoi,
> Ik probeer een client/server applicatie te schrijven die een bestand van de
> client uploadt naar de server.
> Het probleem hierbij is dat ik in de code van mijn server zelf de
> bestandsgrootte hard gecodeerd moet meegeven.
> Hoe zou ik er voor kunnen zorgen dat de server zelf weet wat de
> bestandsgrootte zal zijn van het bestand dat binnenkomt?
> Mijn code ziet er als volgt uit:
>
> SERVER
> ----------
>
> class fserver {
>
> public static void main(String [] args ) throws IOException {
> int filesize=10722; // filesize temporary hardcoded
>
> // create socket
> ServerSocket servsock = new ServerSocket(1111);
> System.out.println("Waiting for connection...");
> Socket sock = servsock.accept();
> System.out.println("Accepted connection");
>
> byte [] mybytearray = new byte [filesize];
>
> BufferedInputStream bis = new
> BufferedInputStream(sock.getInputStream(),filesize);
> // bis.read(mybytearray,0,mybytearray.length);
>
> int bytesRead = 0;
> while ( bytesRead < filesize ) {
> int off = bytesRead;
> int len = filesize - bytesRead;
>
> int readCount = bis.read( mybytearray, off, len );
>
> if ( readCount == -1 ) { // chech for EOF
> System.err.println( "unexpected EOF" );
> System.exit( 1 );
> }
>
> bytesRead += readCount;
> }
>
> FileOutputStream fos = new FileOutputStream("C:\\briefcopy.doc");
> BufferedOutputStream bos = new BufferedOutputStream(fos);
> fos.write(mybytearray,0,mybytearray.length);
>
> // cleanup after file transfer
> sock.close();
> servsock.close();
> }
>
> }
>
>
> CLIENT
> -----------
>
> class fclient {
>
> public static void main (String [] args ) throws IOException {
>
> // create socket
> Socket sock = new Socket("127.0.0.1",1111);
> System.out.println("Connecting...");
>
> // get the file handle to send
>
> File myFile = new File( "C:\\brief.doc" );
> byte [] mybytearray = new byte [(int)myFile.length()];
> FileInputStream fis = new FileInputStream(myFile);
> BufferedInputStream bis = new BufferedInputStream(fis);
> bis.read(mybytearray,0,mybytearray.length);
> OutputStream os;
> DataOutputStream dos;
> os=sock.getOutputStream();
> dos=new DataOutputStream(os);
> System.out.println("Sending...");
> dos.write(mybytearray,0,mybytearray.length);
>
> // cleanup
>
> sock.close();
>
> }
>
> }
>
>
> -------------------------------------------------------------------
>
> Alvast bedankt,
> Pieter
>
>
>
>
Als je echt deze wijze wil gebruiken dan maak je eerst een protocol op.
Een soort van afspraak tussen client en server. De client stuurt
eerst in bv 32bytes(tekstvorm) de lengte op van het bestand, zo weet de
server zijde hoeveel hij binnen moet krijgen.
Zelf gebruik ik headers en footers rond de berichten die ik zend. Zo
weet de server perfect wanneer hij een volledige boodschap heeft.
Hoop je hiermee verder op weg te helpen....
MS: Je kan altijd FTP gebruiken........
Pascal
Technical Details
Message-ID:
<45b66ed6$0$2684$ba620e4c@news.skynet.be>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!newshub.sdsu.edu!newsfeed.news2me.com!news.skynet.be!skynet.be!newspost001!tjb!not-for-mailReferences:
<r3rsh.300661$W33.6038622@phobos.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,4e7fc654d96d4a4a X-Google-Attributes: gidfcea4,public X-Google-Language: DUTCH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!newshub.sdsu.edu!newsfeed.news2me.com!news.skynet.be!skynet.be!newspost001!tjb!not-for-mail Date: Tue, 23 Jan 2007 21:23:50 +0100 From: b010310 <pascal.vanpuymbroeck@zenonproductions.be> User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: client/server file transfer in java References: <r3rsh.300661$W33.6038622@phobos.telenet-ops.be> In-Reply-To: <r3rsh.300661$W33.6038622@phobos.telenet-ops.be> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Lines: 111 Message-ID: <45b66ed6$0$2684$ba620e4c@news.skynet.be> Organization: -= Belgacom Usenet Service =- NNTP-Posting-Host: 524e7c3d.news.skynet.be X-Trace: 1169583830 news.skynet.be 2684 81.244.153.33:1070 X-Complaints-To: usenet-abuse@skynet.be